Linuxword Global
当前位置: 通信协议 > BGP知识手册(华为,华三,思科)

BGP介绍

定义:

边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)。

MP-BGP是对BGP-4进行了扩展,来达到在不同网络中应用的目的,BGP-4原有的消息机制和路由机制并没有改变。MP-BGP在IPv6单播网络上的应用称为BGP4+,在IPv4组播网络上的应用称为MBGP(Multicast BGP)。

目的:

为方便管理规模不断扩大的网络,网络被分成了不同的自治系统。1982年,外部网关协议EGP(Exterior Gateway Protocol)被用于实现在AS之间动态交换路由信息。但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。

BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。

虽然BGP用于在AS之间传递路由信息,但并不是所有AS之间传递路由信息都需要运行BGP。比如在数据中心上行的连入Internet的出口上,为了避免Internet海量路由对数据中心内部网络的影响,设备采用静态路由代替BGP与外部网络通信。

受益:

BGP从多方面保证了网络的安全性、灵活性、稳定性、可靠性和高效性:

BGP特点

BGP具有如下特点:

  • BGP是一种EGP(Exterior Gateway Protocol,外部网关协议),与OSPF、RIP等IGP(Interior Gateway Protocol,内部网关协议)不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最佳路由。
  • BGP使用TCP作为其传输层协议(端口号179),提高了协议的可靠性。
  • BGP是一种路径矢量(Path-Vector)路由协议,它采用到达目的地址所经过的AS列表来衡量到达目的地址的距离。
  • BGP支持CIDR(Classless Inter-Domain Routing,无类域间路由)。
  • 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
  • BGP路由通过携带AS路径信息彻底解决路由环路问题。
  • BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。
  • BGP易于扩展,能够适应网络新的发展。

BGP原理描述

BGP基本概念

自治系统AS(Autonomous System)

AS是指在一个实体管辖下的拥有相同选路策略的IP网络。BGP网络中的每个AS都被分配一个唯一的AS号,用于区分不同的AS。AS号分为2字节AS号和4字节AS号,其中2字节AS号的范围为1至65535,4字节AS号的范围为1至4294967295。支持4字节AS号的设备能够与支持2字节AS号的设备兼容。

AS号规划:

As号分配情况:https://www.iana.org/assignments/as-numbers/as-numbers.xhtml

BGP的RFC1771里留给AS的范围是2个字节,所以AS的取值范围为1-65535,其中64512-65534为私有AS。在RFC4893里定义了一个BGP的新功能——4字节AS(BGP Support for Four-octet AS Number,一般用M.N来描述)。但是鉴于IPv4地址空间不够这个前车之鉴,

4字节AS号有两种表达方式,点分形式和整数形式,转换关系为:X65536+Y=X.Y, 其中(X65536+Y)为整数形式四字节AS号;X.Y即为点分形式的四字节AS号;

设备支持4字节的AS号,即AS号取值占用4字节,取值范围为1~4294967295。

四字节的私有AS号为:4200000000-4294967294。

BGP分类

BGP按照运行方式分为EBGP(External/Exterior BGP)和IBGP(Internal/Interior BGP)。

  • EBGP:运行于不同AS之间的BGP称为EBGP。为了防止AS间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃。
  • IBGP:运行于同一AS内部的BGP称为IBGP。为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接。为了解决IBGP对等体的连接数量太多的问题,BGP设计了路由反射器BGP联盟

BGP报文交互中的角色

BGP报文交互中分为Speaker和Peer两种角色。

  • Speaker:发送BGP报文的设备称为BGP发言者(Speaker),它接收或产生新的报文信息,并发布(Advertise)给其它BGP Speaker。
  • Peer:相互交换报文的Speaker之间互称对等体(Peer)。若干相关的对等体可以构成对等体组(Peer Group)。

BGP的路由器号(Router ID)

BGP的Router ID是一个用于标识BGP设备的32位值,通常是IPv4地址的形式,在BGP会话建立时发送的Open报文中携带。对等体之间建立BGP会话时,每个BGP设备都必须有唯一的Router ID,否则对等体之间不能建立BGP连接。

BGP的Router ID在BGP网络中必须是唯一的,可以采用手工配置,也可以让设备自动选取。缺省情况下,BGP选择设备上的Loopback接口的IPv4地址作为BGP的Router ID。如果设备上没有配置Loopback接口,系统会选择接口中最大的IPv4地址作为BGP的Router ID。一旦选出Router ID,除非发生接口地址删除等事件,否则即使配置了更大的地址,也保持原来的Router ID。

BGP工作原理

BGP对等体的建立、更新和删除等交互过程主要有5种报文、6种状态机和5个原则。

BGP的报文

BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送:

  • Open报文:用于建立BGP对等体连接。
  • Update报文:用于在对等体之间交换路由信息。
  • Notification报文:用于中断BGP连接。
  • Keepalive报文:用于保持BGP连接。
  • Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。

BGP状态机

BGP对等体的交互过程中存在6种状态机:空闲(Idle)、连接(Connect)、活跃(Active)、Open报文已发送(OpenSent)、Open报文已确认(OpenConfirm)和连接已建立(Established)。在BGP对等体建立的过程中,通常可见的3个状态是:Idle、Active和Established。

16137-cond-adv-00

 

  1. Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。

说明:http://localhost:7890/pages/31189183/08/31189183/08/resources/public_sys-resources/icon-note.gif

  • Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。

  • 任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。

  1. 在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
  • 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
  • 如果TCP连接失败,那么BGP转至Active状态。
  • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
  1. 在Active状态下,BGP总是在试图建立TCP连接。
  • 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
  • 如果TCP连接失败,那么BGP停留在Active状态。
  • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
  1. 在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
  • 如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。
  • 如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
  1. 在OpenConfirm状态下,BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。

  2. 在Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。

  • 如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
  • 如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。
  • Route-refresh报文不会改变BGP状态。
  • 如果收到Notification报文,那么BGP转至Idle状态。
  • 如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态。

BGP对等体之间的交互原则

华为设备:

BGP设备将最优路由加入BGP路由表,形成BGP路由。BGP设备与对等体建立邻居关系后,采取以下交互原则:

从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。

从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体。

当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体。

路由更新时,BGP设备只发送更新的BGP路由。

所有对等体发送的路由,BGP设备都会接收。

华三设备发布路由的策略

BGP发布路由时采用如下策略:

  • 存在多条有效路由时,BGP发言者只将最优路由发布给对等体。如果配置了advertise-rib-active命令,则BGP发布IP路由表中的最优路由;否则,发布BGP路由表中的最优路由。
  • BGP发言者只把自己使用的路由发布给对等体。
  • BGP发言者会将从EBGP获得的路由发布给它的所有BGP对等体(包括EBGP对等体和IBGP对等体)。
  • BGP发言者会将从IBGP获得的路由发布给它的EBGP对等体,但不会发布给它的IBGP对等体。
  • 会话一旦建立,BGP发言者将把满足上述条件的所有BGP路由发布给新对等体。之后,BGP发言者只在路由变化时,向对等体发布更新的路由。

BGP与IGP进行交互

BGP与IGP在设备中使用不同的路由表,为了实现不同AS间相互通讯,BGP需要与IGP进行交互,即BGP路由表和IGP路由表相互引入。

BGP引入IGP路由

BGP协议本身不发现路由,因此需要将其他路由引入到BGP路由表,实现AS间的路由互通。当一个AS需要将路由发布给其他AS时,AS边缘路由器会在BGP路由表中引入IGP的路由。为了更好的规划网络,BGP在引入IGP的路由时,可以使用路由策略进行路由过滤和路由属性设置,也可以设置MED值指导EBGP对等体判断流量进入AS时选路。

BGP引入路由时支持Import和Network两种方式:

  • Import方式是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。
  • Network方式是逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确。

IGP引入BGP路由

当一个AS需要引入其他AS的路由时,AS边缘路由器会在IGP路由表中引入BGP的路由。为了避免大量BGP路由对AS内设备造成影响,当IGP引入BGP路由时,可以使用路由策略,进行路由过滤和路由属性设置。

BGP安全性

BGP使用认证、通用TTL安全保护机制GTSM(Generalized TTL Security Mechanism)和RPKI(Resource Public Key Infrastructure)三个方法保证BGP对等体间的交互安全。

BGP认证

BGP认证分为MD5认证和Keychain认证,对BGP对等体关系进行认证是提高安全性的有效手段。MD5认证只能为TCP连接设置认证密码,而Keychain认证除了可以为TCP连接设置认证密码外,还可以对BGP协议报文进行认证。

BGP GTSM

BGP GTSM检测IP报文头中的TTL(time-to-live)值是否在一个预先设置好的特定范围内,并对不符合TTL值范围的报文进行允许通过或丢弃的操作,从而实现了保护IP层以上业务,增强系统安全性的目的。

例如将IBGP对等体的报文的TTL的范围设为254至255。当攻击者模拟合法的BGP协议报文,对设备不断的发送报文进行攻击时,TTL值必然小于254。如果没有使能BGP GTSM功能,设备收到这些报文后,发现是发送给本机的报文,会直接上送控制层面处理。这时将会因为控制层面处理大量攻击报文,导致设备CPU占用率高,系统异常繁忙。如果使能BGP GTSM功能,系统会对所有BGP报文的TTL值进行检查,丢弃TTL值小于254的攻击报文,从而避免了因网络攻击报文导致CPU占用率高的问题。

BGP的路由优选规则和负载分担

在BGP路由表中,到达同一目的地可能存在多条路由。此时BGP会选择其中一条路由作为最佳路由,并只把此路由发送给其对等体。BGP为了选出最佳路由,会根据BGP的路由优选规则依次比较这些路由的BGP属性。

BGP属性

路由属性是对路由的特定描述,所有的BGP路由属性都可以分为以下4类,常见BGP属性类型如表1所示:

  • 公认必须遵循(Well-known mandatory):所有BGP设备都可以识别此类属性,且必须存在于Update报文中。如果缺少这类属性,路由信息就会出错。
  • 公认任意(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中,即就算缺少这类属性,路由信息也不会出错。
  • 可选过渡(Optional transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体。
  • 可选非过渡(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体。
1BGP常见属性类型  
属性名 类型
Origin属性 公认必须遵循
AS_Path属性 公认必须遵循
Next_Hop属性 公认必须遵循
Local_Pref属性 公认任意
MED属性 可选非过渡
团体属性 可选过渡
Originator_ID属性 可选非过渡
Cluster_List属性 可选非过渡

Origin属性

Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:

  • IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
  • EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
  • Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。

AS_Path属性

AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。

当BGP Speaker传播自身引入的路由时:

  • 当BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表。
  • 当BGP Speaker将这条路由通告给IBGP对等体时,便会在Update报文中创建一个空的AS_Path列表。
  • 当BGP Speaker传播从其他BGP Speaker的Update报文中学习到的路由时:
  • 当BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP设备根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
  • 当BGP Speaker将这条路由通告给IBGP对等体时,不会改变这条路由相关的AS_Path属性。

AS_PATH属性有以下两种类型:

  • AS_SEQUENCE:AS号按照一定的顺序排列。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
  • AS_SET:AS号只是经过的AS的简单罗列,没有顺序要求。

AS_PATH属性具有如下用途:

  • 避免路由环路的形成:缺省情况下,如果BGP路由器接收到的路由的AS_PATH属性中已经包含了本地的AS号,则BGP路由器认为出现路由环路,不会接受该路由。
  • 影响路由的选择:在其他因素相同的情况下,BGP会优先选择路径较短的路由。
  • 对路由进行过滤:通过配置AS路径过滤列表,可以针对AS_PATH属性中所包含的AS号来对路由进行过滤

Next_Hop属性

Next_Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_Hop属性遵循下面的规则:

  • BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
  • BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
  • BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。

Local_Pref属性

Local_Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。Local_Pref**属性仅在IBGP对等体之间有效,不通告给其他AS。Local_Pref属性可以手动配置,如果路由没有配置Local_Pref属性,BGP选路时将该路由的Local_Pref值按缺省值100来处理。

MED属性

MED(Multi-Exit Discriminator)属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。

MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。

团体属性

团体属性(Community)用于标识具有相同特征的BGP路由,使路由策略的应用更加灵活,同时降低了维护管理的难度。

团体属性分为自定义团体属性和公认团体属性。公认团体属性如表2所示。

表**2** 公认团体属性    
团体属性名称 团体属性号 说明
Internet 0(0x00000000) 设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由。
No_Advertise 4294967042(0xFFFFFF02) 设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由。
No_Export 4294967041(0xFFFFFF01) 设备收到具有此属性的路由后,将不向AS外发送该路由。
No_Export_Subconfed 4294967043(0xFFFFFF03) 设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由。

扩展团体属性

华三文档:

随着团体属性的应用日益广泛,原有四字节的团体属性无法满足用户的需求。因此,BGP定义了新的路由属性——扩展团体属性。扩展团体属性与团体属性有如下不同:

扩展团体属性为八字节,提供了更多的属性值。

扩展团体属性可以划分类型。在不同的组网应用中,可以使用不同类型的扩展团体属性对路由进行过滤和控制。与不区分类型、统一使用同一个属性值空间的团体属性相比,扩展团体属性的配置和管理更为简单。

目前,设备支持的扩展团体属性有VPN Target属性和SoO(Site of Origin,源站点)属性。

SoO扩展团体属性用来标识路由的原始站点。路由器不会将带有SoO属性的路由发布给该SoO标识的站点,确保来自某个站点的路由不会再被发布到该站点,从而避免路由环路。在AS路径信息丢失时,可以通过SoO属性来避免发生环路。

SoO属性有三种格式:

16位自治系统号:32位用户自定义数,例如:101:3。

32位IP地址:16位用户自定义数,例如:192.168.122.15:1。

32位自治系统号:16位用户自定义数,其中的自治系统号最小值为65536。例如:65536:1。

Originator_ID属性

Originator_ID属性和Cluster_List属性用于解决路由反射器场景中的环路问题

Cluster_list属性

Originator_ID属性和Cluster_List属性用于解决路由反射器场景中的环路问题

BGP选择路由的策略

华为设备BGP选路原则:

当到达同一目的地存在多条路由时,BGP依次对比下列属性来选择路由:

  1. 优选协议首选值(PrefVal)最高的路由。

    协议首选值(**PrefVal)是华为设备的特有属性,该属性仅在本地有效。

  2. 优选本地优先级(Local_Pref)最高的路由。

    如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。

  3. 依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由。

  4. 优选AS路径(AS_Path)最短的路由。

  5. 依次优选Origin类型为IGP、EGP、Incomplete的路由。

  6. 对于来自同一AS的路由,优选MED值最低的路由。

  7. 依次优选EBGP路由、IBGP路由、LocalCross路由、RemoteCross路由。

    PE上某个VPN实例的VPNv4路由的ERT匹配其他VPN实例的IRT后复制到该VPN实例,称为LocalCross;从远端PE学习到的VPNv4路由的ERT匹配某个VPN实例的IRT后复制到该VPN实例,称为RemoteCross。

  8. 优选到BGP下一跳IGP度量值(metric)最小的路由。

  9. 优选Cluster_List最短的路由。

  10. 优选Router ID最小的设备发布的路由。

  11. 如果路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小(不再比较Router ID),并优选Originator_ID最小的路由。

  12. 优选从具有最小IP Address的对等体学来的路由。

  • load-balancing as-path-relax命令用来设置路由在形成负载分担时不比较相同长度的AS-Path属性。

    缺省情况下,路由在形成负载分担时比较路由的AS-Path属性。

  • bestroute as-path-ignore命令用来配置BGP在选择最优路由时忽略AS路径属性。

    缺省情况下,BGP将AS路径属性作为选择最优路由的一个条件。

华三BGP选路原则

目前,BGP选择路由的过程为:

  1. 丢弃下一跳(NEXT_HOP)不可达的路由;
  2. 优选首选值(Preferred-value)最大的路由;
  3. 优选本地优先级(LOCAL_PREF)最高的路由;
  4. 依次选择network命令生成的路由、import-route命令引入的路由、聚合路由;
  5. 优选AS路径(AS_PATH)最短的路由;
  6. 依次选择ORIGIN类型为IGP、EGP、Incomplete的路由;
  7. 优选MED值最低的路由;
  8. 依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由;
  9. 优选IGP Metric值最小的路由;
  10. 优选迭代深度值小的路由;
  11. 如果路由都来自EBGP邻居,并且Router ID不相同,优选曾经的最优路由;
  12. 优选Router ID最小的路由器发布的路由。如果路由包含RR属性,那么在路由选择过程中,就用ORIGINATOR_ID来替代Router ID;
  13. 优选CLUSTER_LIST长度最短的路由;
  14. 优选IP地址最小的对等体发布的路由。
  • balance as-path-neglect (可选)配置不同AS_PATH属性的路由能够形成BGP负载分担

    缺省情况下,不同AS_PATH属性的路由之间不能形成BGP负载分担

  • balance as-path-relax (可选)配置内容不同但长度相同的AS_PATH属性的路由能够形成BGP负载分担

    缺省情况下,内容不同但长度相同的AS_PATH属性的路由不能形成BGP负载分担

思科BGP选路原则:

  1. refer the path with the highest WEIGHT.

  2. refer the path with the highest LOCAL_PREF

  3. refer the path that was locally originated via a network or aggregate BGP subcommand or through redistribution from an IGP.

    Local paths that are sourced by the network or redistribute commands are preferred over local aggregates that are sourced by the aggregate-address command.

  4. refer the path with the shortest AS_PATH.

  5. refer the path with the lowest origin type.

  6. refer the path with the lowest multi-exit discriminator (MED).

  7. refer eBGP over iBGP paths.

    If bestpath is selected, go to Step 9 (multipath).

  8. refer the path with the lowest IGP metric to the BGP next hop.

  9. etermine if multiple paths require installation in the routing table for BGP Multipath.

  10. n both paths are external, prefer the path that was received first (the oldest one).

    This step minimizes route-flap because a newer path does not displace an older one, even if the newer path would be the preferred route based on the next decision criteria (Steps 11, 12, and 13).

    Skip this step if any of these items is true:

  • You have enabled the bgp best path compare-routerid command.

  • The router ID is the same for multiple paths because the routes were received from the same router.

  • There is no current best path. The current best path can be lost when, for example, the neighbor that offers the path goes down

  1. fer the route that comes from the BGP router with the lowest router ID.

    The router ID is the highest IP address on the router, with preference given to loopback addresses. Also, you can use the bgp router-id command to manually set the router ID.

  2. the originator or router ID is the same for multiple paths, prefer the path with the minimum cluster list length.

    This is only present in BGP RR environments. It allows clients to peer with RRs or clients in other clusters. In this scenario, the client must be aware of the RR-specific BGP attribute.

  3. Prefer the path that comes from the lowest neighbor address.

    This address is the IP address that is used in the BGP neighbor configuration. The address corresponds to the remote peer that is used in the TCP connection with the local router.

BGP负载分担

当到达同一目的地址存在多条等价路由时,可以通过BGP等价负载分担实现均衡流量的目的。形成BGP等价负载分担的条件是“BGP选择路由的策略”的1至8条规则中需要比较的属性完全相同。

华三文档:

BGP可以通过如下两种方式实现负载分担:

基于迭代路由实现负载分担

由于BGP协议本身的特殊性,它产生的路由的下一跳地址可能不是当前路由器直接相连的邻居。常见的一个原因是:IBGP之间发布路由信息时不改变下一跳。这种情况下,为了能够将报文正确转发出去,路由器必须先找到一个直接可达的地址(查找IGP建立的路由表项),通过这个地址到达路由表中指示的下一跳。在上述过程中,去往直接可达地址的路由被称为依赖路由,BGP路由依赖于这些路由指导报文转发。根据下一跳地址找到依赖路由的过程就是路由迭代。

目前系统支持基于迭代的BGP负载分担,即如果依赖路由本身是负载分担的(假设有三个下一跳地址),则BGP也会生成与依赖路由数量相同的下一跳地址来指导报文转发。需要说明的是,基于迭代的BGP负载分担并不需要命令配置,这一特性在系统上始终启用。

通过改变BGP选路规则实现负载分担

在实现方法上,BGP的负载分担与IGP的负载分担有所不同:

IGP(如RIP、OSPF)是通过协议定义的路由算法,对到达同一目的地址的不同路由,根据计算结果,将度量值(metric)相等的路由进行负载分担,选择的标准很明确(按metric)。

BGP本身并没有路由计算的算法,它只是一个选路的路由协议,因此,不能根据一个明确的度量值决定是否对路由进行负载分担,但BGP有丰富的选路规则,可以在对路由进行一定的选择后,有条件地进行负载分担,也就是将负载分担加入到BGP的选路规则中去。

采用本方式进行负载分担时,BGP不再按照“选路规则”中的规则选择路由,当路由同时满足如下条件时,即在这些路由间进行负载分担:

ORIGIN属性、LOCAL_PREF属性和MED属性完全相同。如果未配置balance as-path-neglect命令,则要求AS_PATH属性也必须相同;如果配置了该命令,则AS_PATH属性可以不同。

同为标签路由(具有对应MPLS标签值的路由)或同为非标签路由。

如果未配置balance as-path-neglect命令,形成负载分担的路由的AS_PATH属性相同,则发布路由的AS_PATH属性就为该值;如果配置了balance as-path-neglect命令,形成负载分担的路由的AS_PATH属性不同,则发布路由的AS_PATH属性为最佳路由的AS_PATH属性。

NEXT_HOP属性改变为Router C的地址,而不是原来的EBGP对等体地址。

其它的BGP路由属性为最佳路由的属性。

思科文档:

In order to be candidates for multipath, paths to the same destination need to have these characteristics equal to the best-path characteristics:

Weight

Local preference

AS-PATH length

Origin

MED

One of these:

Neighboring AS or sub-AS (before the addition of the eiBGP Multipath feature)

AS-PATH (after the addition of the eiBGP Multipath feature)

Some BGP Multipath features put additional requirements on multipath candidates.

These are the additional requirements for eBGP multipath:

The path should be learned from an external or confederation-external neighbor (eBGP).

The IGP metric to the BGP next hop should be equal to the best-path IGP metric.

These are the additional requirements for iBGP multipath:

The path should be learned from an internal neighbor (iBGP).

The IGP metric to the BGP next hop should be equal to the best-path IGP metric, unless the router is configured for unequal-cost iBGP multipath.

BGP inserts up to n most recently received paths from multipath candidates in the IP routing table. The maximum value of n is currently 6. The default value, when multipath is disabled, is 1.

For unequal-cost load balancing, you can also use BGP Link Bandwidth.

路由反射器

为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台设备,那么建立的IBGP连接数就为n(n-1)/2。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和CPU资源的消耗都很大。在IBGP对等体间使用路由反射器可以解决以上问题。

路由反射器相关角色

在一个AS内部关于路由反射器有以下几种角色:

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/%E5%8F%8D%E5%B0%84%E5%99%A8.png

 

  • 路由反射器RR(Route Reflector):允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似OSPF网络中的DR。
  • 客户机(Client):与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。
  • 非客户机(Non-Client):既不是RR也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系。
  • 始发者(Originator):在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。
  • 集群(Cluster):路由反射器及其客户机的集合。Cluster_List属性用于防止集群间产生路由环路。

路由反射器原理

同一集群内的客户机只需要与该集群的RR直接交换路由信息,因此客户机只需要与RR之间建立IBGP连接,不需要与其他客户机建立IBGP连接,从而减少了IBGP连接数量。如上图所示,在AS65000内一台设备作为RR,三台设备作为客户机,形成Cluster1。此时AS65000中IBGP的连接数从配置RR前的10条减少到4条,不仅简化了设备的配置,也减轻了网络和CPU的负担。

RR突破了“从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。”的限制,并采用独有的Cluster_List属性和Originator_ID属性防止路由环路。RR向IBGP邻居发布路由规则如下:

  • 从非客户机学到的路由,发布给所有客户机。
  • 从客户机学到的路由,发布给所有非客户机和客户机(发起此路由的客户机除外)。
  • 从EBGP对等体学到的路由,发布给所有的非客户机和客户机。

Cluster_List属性

路由反射器和它的客户机组成一个集群(Cluster),使用AS内唯一的Cluster ID作为标识。为了防止集群间产生路由环路,路由反射器使用Cluster_List属性,记录路由经过的所有集群的Cluster ID。

当一条路由第一次被RR反射的时候,RR会把本地Cluster ID添加到Cluster List的前面。如果没有Cluster_List属性,RR就创建一个。

当RR接收到一条更新路由时,RR会检查Cluster List。如果Cluster List中已经有本地Cluster ID,丢弃该路由;如果没有本地Cluster ID,将其加入Cluster List,然后反射该更新路由。

备份路由反射器

为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的RR。由于RR打破了从IBGP对等体收到的路由不能传递给其他IBGP对等体的限制,所以同一集群内的RR之间中可能存在环路。这时,该集群中的所有RR必须使用相同的Cluster ID,以避免RR之间的路由环路。

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/%E5%A4%87%E4%BB%BD.png

 

如上图,路由反射器RR1和RR2在同一个集群内,配置了相同的Cluster ID。

当客户机Client1从EBGP对等体接收到一条更新路由,它将通过IBGP向RR1和RR2通告这条路由。

RR1和RR2在接收到该更新路由后,将本地Cluster ID添加到Cluster List前面,然后向其他的客户机(Client2、Client3)反射,同时相互反射。

RR1和RR2在接收到该反射路由后,检查Cluster List,发现自己的Cluster ID已经包含在Cluster List中。于是RR1和RR2丢弃该更新路由,从而避免了路由环路。

多集群路由反射器

一个AS中可以存在多个集群,各个集群的RR之间建立IBGP对等体。当RR所处的网络层不同时,可以将较低网络层次的RR配成客户机,形成分级RR。当RR所处的网络层相同时,可以将不同集群的RR全连接,形成同级RR。

分级的路由反射器

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/%E5%88%86%E7%BA%A7.png

 

在实际的RR部署中,常用的是分级RR的场景。ISP为AS100提供Internet路由。AS100内部分为两个集群,其中Cluster1内的四台设备是核心路由器,采用备份RR的形式保证可靠性。

同级路由反射器

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/%E5%90%8C%E7%BA%A7.png

 

一个骨干网被分成多个集群。各集群的RR互为非客户机关系,并建立全连接。此时虽然每个客户机只与所在集群的RR建立IBGP连接,但所有RR和客户机都能收到全部路由信息。

BGP联盟

解决AS内部的IBGP网络连接激增问题,除了使用路由反射器之外,还可以使用联盟(Confederation)。联盟将一个AS划分为若干个子AS。每个子AS内部建立IBGP全连接关系,子AS之间建立联盟EBGP连接关系,但联盟外部AS仍认为联盟是一个AS。配置联盟后,原AS号将作为每个路由器的联盟ID。这样有两个好处:一是可以保留原有的IBGP属性,包括Local Preference属性、MED属性和NEXT_HOP属性等;二是联盟相关的属性在传出联盟时会自动被删除,即管理员无需在联盟的出口处配置过滤子AS号等信息的操作。

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/%E8%81%94%E7%9B%9F.png

 

如上图,所示,AS100使用联盟后被划分为3个子AS:AS65001、AS65002和AS65003,使用AS100作为联盟ID。此时IBGP的连接数量从10条减少到4条,不仅简化了设备的配置,也减轻了网络和CPU的负担。而AS100外的BGP设备因为仅知道AS100的存在,并不知道AS100内部的联盟关系,所以不会增加CPU的负担。

路由反射器和联盟的比较

   
路由反射器 联盟
不需要更改现有的网络拓扑,兼容性好。 需要改变逻辑拓扑。
配置方便,只需要对作为反射器的设备进行配置,客户机并不需要知道自己是客户机。 所有设备需要重新进行配置。
集群与集群之间仍然需要全连接。 联盟的子AS之间是特殊的EBGP连接,不需要全连接。
适用于中、大规模网络。 适用于大规模网络。

路由聚合

在大规模的网络中,BGP路由表十分庞大,给设备造成了很大的负担,同时使发生路由振荡的几率也大大增加,影响网络的稳定性。

路由聚合是将多条路由合并的机制,它通过只向对等体发送聚合后的路由而不发送所有的具体路由的方法,减小路由表的规模。并且被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

BGP在IPv4网络中支持自动聚合和手动聚合两种方式,而IPv6网络中仅支持手动聚合方式:

自动聚合:对BGP引入的路由进行聚合。配置自动聚合后,BGP将按照自然网段聚合路由(例如非自然网段A类地址10.1.1.1/24和10.2.1.1/24将聚合为自然网段A类地址10.0.0.0/8),并且BGP向对等体只发送聚合后的路由。

手动聚合:对BGP本地路由表中存在的路由进行聚合。手动聚合可以控制聚合路由的属性,以及决定是否发布具体路由。

为了避免路由聚合可能引起的路由环路,BGP设计了AS_Set属性。AS_Set属性是一种无序的AS_Path属性,标明聚合路由所经过的AS号。当聚合路由重新进入AS_Set属性中列出的任何一个AS时,BGP将会检测到自己的AS号在聚合路由的AS_Set属性中,于是会丢弃该聚合路由,从而避免了路由环路的形成。

路由衰减

当BGP应用于复杂的网络环境时,路由振荡十分频繁。为了防止频繁的路由振荡带来的不利影响,BGP使用路由衰减来抑制不稳定的路由。

路由振荡指路由表中添加一条路由后,该路由又被撤销的过程。当发生路由振荡时,设备就会向邻居发布路由更新,收到更新报文的设备需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正常工作。

BGP衰减示意图

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/%E6%83%A9%E7%BD%9A%E5%80%BC.png

 

路由衰减使用惩罚值(Penalty value)来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定。如上图所示,路由每发生一次振荡,BGP便会给此路由增加1000的惩罚值,其余时间惩罚值会慢慢下降。当惩罚值超过抑制阈值(suppress value)时,此路由被抑制,不加入到路由表中,也不再向其他BGP对等体发布更新报文。被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(half-life)。当惩罚值降到再使用阈值(reuse value)时,此路由变为可用并被加入到路由表中,同时向其他BGP对等体发布更新报文。从路由被抑制到路由恢复可用的时间称为抑制时间(suppress time)。

路由衰减只对EBGP路由起作用,对IBGP路由不起作用。这是因为IBGP路由可能含有本AS的路由,而IGP网络要求AS内部路由表尽可能一致。如果路由衰减对IBGP路由起作用,那么当不同设备的衰减参数不一致时,将会导致路由表不一致。

BMP

BGP监控协议BGP Monitoring Protocol(BMP)能够对网络中的设备的BGP运行状态进行实时监控,BGP运行状态包括对等体关系的建立与解除、路由信息刷新等。

实现BMP之前,只能通过人工查询方式来获得设备的BGP运行状态,效率较低;实现BMP之后,设备可通过与监控服务器的连接,向监控服务器上报其运行状态信息,大大提升了网络监控的效率。通过BMP了解BGP运行状态,可以及时发现网络中的安全隐患并采取规避措施,保障了网络的稳定性。

BMP消息类型

BMP会话包含Initiation、PU、RM、PD、SR、Termination六种消息,六种消息均以报文形式发送。上报的信息主要为BGP路由信息、BGP邻居信息和设备的厂商信息、版本号等。

Initiation消息:初始化消息,向监控服务器通告厂商信息、版本号等。

  • PU(Peer Up Notification)消息:向监控服务器上报与对等体BGP连接的建立。
  • RM(Route Monitoring)消息:路由监控消息,向监控服务器发送从对等体收到的所有路由,并随时向监控服务器上报路由的新增或撤销。
  • PD(Peer Down Notification)消息:向监控服务器上报与对等体BGP连接的中断。
  • SR(Stats Reports)消息:向监控服务器上报设备运行状态的统计信息。
  • Termination消息:结束消息,向监控服务器通告关闭BMP会话的原因。
  • BMP会话是单向的,即设备向监控服务器上报消息但忽略监控服务器发送的任何消息。

BMP工作原理

BMP典型组网;

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/bmp.png

 

被监控设备(如图中的PE1、PE2)与监控服务器建立TCP连接,监控服务器无需发送任何指令给被监控设备,被监控设备就会发送BGP运行状态信息给监控服务器,监控服务器解析接收到的BMP报文并呈现在监控视图中。设备发送给监控服务器的报文都带有表示对等体信息的报文头,从而监控服务器可以区分出报文来自哪个BGP邻居。

设备与监控服务器建立连接时需要注意以下几点:

  • 设备与监控服务器的连接基于TCP协议,可以指定连接端口号。
  • 设备与监控服务器的连接可以是多对多的关系。
  • 一个BMP实例仅能连接一台监控服务器。
  • 监控服务器监控所有BGP邻居,不可以指定需要监控的邻居。

BGP与BFD联动

BGP协议通过周期性的向对等体发送报文来实现邻居检测机制。但这种机制检测到故障所需时间比较长,超过1秒钟。当数据的传输速度达到Gbit/s级别时,这种机制的检测时间将导致大量数据丢失,无法满足网络高可靠性的需求。BGP与BFD(Bidirectional Forwarding Detection)联动可以利用BFD的毫秒级快速检测机制解决上述问题。

BGP与BFD联动组网图

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/bfd.png

 

如上图所示,RouterA和RouterB分别属于AS100和AS200,两台路由器直接相连并建立EBGP连接,并配置BGP与BFD联动。当RouterA和RouterB之间的链路发生故障时,BFD利用毫秒级检测机制感知到BFD会话状态由Up变为Down,并通知RouterA和RouterB。RouterA和RouterB处理邻居Down事件,重新进行BGP选路。

BGP Auto FRR

BGP Auto FRR(BGP Auto Fast ReRoute)是一种链路故障保护措施,应用于有主备链路的网络拓扑结构中,可以使BGP的两个邻居切换或者两个下一跳切换达到亚秒级的收敛速度。

BGP Auto FRR对于从不同对等体学到的相同前缀的路由,利用最优路由作为主链路进行转发,并自动将次优路由作为备份链路。当主链路出现故障的时候,系统快速响应BGP路由不可达的通知,并将转发路径切换到备份链路上保证数据转发。在BGP收敛后,BGP Auto FRR再将流量按BGP选出的最佳路由指导转发。

应用

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/ying.png

 

BGP Auto FRR示意图:

所示,RouterD将学到的BGP路由发往AS100中的RouterB和RouterC,然后RouterB和RouterC通过反射器将路由发到RouterA上,RouterA上收到下一跳为RouterB和RouterC的两份路由,配置策略优选其中一条链路上收到的路由,这里假设在RouterA上优选从RouterB发来的路由,主链路是LinkB,备份链路是LinkC。

在RouterA上使能Auto FRR,当域内LinkB经过的节点或者链路出现故障的时候,RouterA上到RouterB的下一跳信息就会失效,触发转发平面迅速将从RouterA到RouterD流量快速切换到LinkC上,优先保证流量不丢失。同时,RouterA重新进行BGP选路,优选从RouterC发来的路由并更新FIB。

BGP GR和NSR

BGP的平滑重启GR(Graceful Restart)和不间断路由NSR(Non-Stop Routing)作为高可靠性的解决方案,其根本目的都是为了保证用户业务在设备故障的时候不受影响或者影响最小。

BGP GR

BGP GR技术保证了在设备重启或者主备倒换过程中转发层面能够继续指导数据的转发,同时控制层面邻居关系的重建以及路由计算等动作不会影响转发层面的功能,从而避免了路由震荡引发的业务中断,提高了整网的可靠性。

GR相关概念:

  • GR Restarter:指由管理员触发或故障触发后,以GR方式重启的设备。
  • GR Helper:GR Restarter的邻居,协助GR Restarter进行GR的设备。
  • GR Time:是GR Helper检测到GR Restarter重启或者主备倒换后,保持转发信息不删除的时间。

BGP GR的过程是:

  1. 利用BGP的能力协商机制,GR Restarter和GR Helper了解彼此的GR能力,建立有GR能力的会话。
  2. 当GR Helper检查到GR Restarter重启或者主备倒换后,不删除和GR Restarter相关的路由和转发表项,也不通知其他邻居,而是等待重建BGP连接。
  3. GR Restarter在GR Time超时前与重启前的所有GR Helper新建立好邻居关系。

BGP NSR

NSR是一种控制平面倒换而邻居不感知的可靠性技术,适用于设备具有主用主控板和备用主控板的场景。与GR相比,NSR具有不需要邻居协助,不存在互通性问题的优点。

设备上NSR功能缺省使能,无需配置。

有无GR、NSR技术的比较

无GR、NSR技术的主备倒换 有GR技术的主备倒换 有NSR技术的主备倒换
BGP邻居重建 BGP邻居重建 BGP邻居重建
路由重新计算 路由重新计算 路由重新计算
转发表变化 转发表保持不变 转发表保持不变
转发流量丢失,业务中断 转发流量零丢失,业务不受影响 转发流量零丢失,业务不受影响
整网感知路由变化,路由短时震荡 除主备倒换设备的邻居外的其他路由器感知不到路由变化 整网不感知路由变化
- GR Restarter需要邻居支持GR Helper功能,GR Helper不支持多邻居节点同时以GR方式主备倒换 不需要邻居支持NSR功能

BGP ORF

RFC5291、RFC5292规定了BGP基于前缀的ORF(Outbound Route Filtering)能力,能将本端设备配置的基于前缀的入口策略通过路由刷新报文发送给BGP邻居。BGP邻居根据这些策略构造出口策略,在路由发送时对路由进行过滤。这样不仅避免了本端设备接收大量无用的路由,降低了本端设备的CPU使用率,还有效减少了BGP邻居的配置工作,降低了链路带宽的占用率。

应用:

当本端设备希望BGP邻居只发送它需要的路由,而BGP邻居又不愿意针对不同设备维护不同的出口策略时,可以运用BGP ORF特性。

图1 域间EBGP邻居场景

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/ying2.png

 

图1所示,直连BGP邻居中,RouterA、RouterB协商基于前缀的ORF能力后,RouterA将本地配置的基于前缀的入口策略打包到Route-refresh报文中发送给RouterB。RouterB根据接收到的路由刷新报文构造出口策略,通过Route-refresh报文发送路由给RouterA。RouterA只收到它需要的路由,而RouterB不必维护路由策略,减少了配置工作。

图2 域内RR场景

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/ying3.png

 

图2所示,域内带RR的BGP邻居,RouterA、RouterB为RR的客户端,RouterA与RR、RouterB与RR,分别协商基于前缀的ORF能力,RouterA、RouterB将本地配置的基于前缀的入口策略打包到Route-refresh报文中发送给RR。RR根据接收到的前缀信息构造出口策略,通过Route-refresh报文将路由反射给RouterA、RouterB。RouterA和RouterB只收到需要的路由,RR不必维护路由策略,减少了配置工作。

BGP按组打包

目前现网路由表的快速增长,以及网络拓扑的复杂性导致BGP需要支持更多的邻居。特别是一些邻居数目多且路由量大的场景下,针对路由器需要给大量的BGP邻居发送路由,且大部分邻居具有相同出口策略的特点,要求较高的打包发包性能。

按组打包技术将所有拥有共同出口策略的BGP邻居当作是一个打包组。这样每条待发送路由只被打包一次然后发给组内的所有邻居,使打包效率指数级提升。例如,一个反射器有100个客户机,有10万条路由需要反射。如果按照每个邻居分别打包的方式,反射器RR在向100个客户机发送路由的时候,所有路由被打包的总次数是10万×100。而按组打包技术将这个过程变为10万×1,性能相当于提升了100倍。

应用

在邻居数目多、路由量大且大部分邻居具有相同出口策略的场景下,按组打包技术极大的提高了BGP打包发包性能。按组打包的典型应用场景主要有以下三种情况:

在国际关口局场景

图1所示,IGW Router会向所有相邻AS发送路由。如果IGW Router支持BGP按组打包功能,那么它的BGP的转发性能将得到较大的提升。

图1 国际关口局典型组网图

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/c1.png

 

路由反射器场景

图2所示,RR会向所有Client发送路由。如果RR支持BGP按组打包功能,那么它的BGP的转发性能将得到较大的提升。

图2 路由反射器典型组网图

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/c2.png

 

ASBR场景

图3所示,作为ASBR的RouterB从EBGP邻居RouterA收来路由后,会向所有IBGP邻居发送。如果RouterB支持BGP按组打包功能,那么它的BGP的转发性能将得到较大的提升。

图3 PE与多个IBGP邻居连接典型组网图

采集失败,请手动处理

https://cshihong.github.io/2020/04/18/BGP%E7%9F%A5%E8%AF%86%E6%89%8B%E5%86%8C-%E5%8D%8E%E4%B8%BA-%E5%8D%8E%E4%B8%89-%E6%80%9D%E7%A7%91/c3.png

 

MP-BGP

传统的BGP-4只能管理IPv4单播路由信息,对于使用其它网络层协议(如IPv6、组播等)的应用,在跨AS传播时就受到一定限制。BGP多协议扩展MP-BGP(MultiProtocol BGP)就是为了提供对多种网络层协议的支持,对BGP-4进行的扩展。目前的MP-BGP标准是RFC4760,使用扩展属性和地址族来实现对IPv6、组播和VPN相关内容的支持,BGP协议原有的报文机制和路由机制并没有改变。

MP-BGP对IPv6单播网络的支持特性称为BGP4+,对IPv4组播网络的支持特性称为MBGP(Multicast BGP)。MP-BGP为IPv6单播网络和IPv4组播网络建立独立的拓扑结构,并将路由信息储存在独立的路由表中,保持单播IPv4网络、单播IPv6网络和组播网络之间路由信息相互隔离,也就实现了用单独的路由策略维护各自网络的路由。

扩展属性

BGP使用的报文中,与IPv4相关的三处信息都由Update报文携带,这三处信息分别是:NLRI字段、Next_Hop属性、Aggregator属性。

为实现对多种网络层协议的支持,BGP需要将网络层协议的信息反映到NLRI及Next_Hop。因此MP-BGP引入了两个新的可选非过渡路径属性:

  • MP_REACH_NLRI:Multiprotocol Reachable NLRI,多协议可达NLRI。用于发布可达路由及下一跳信息。
  • MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多协议不可达NLRI。用于撤销不可达路由。

地址族

MP-BGP采用地址族(Address Family)来区分不同的网络层协议,目前支持的地址族视图包括:

  • BGP-IPv4单播地址族视图
  • BGP-IPv4组播地址族视图
  • BGP-VPN实例IPv4地址族视图
  • BGP-VPNv4地址族视图
  • BGP-IPv6单播地址族视图
  • BGP-VPN实例IPv6地址族视图
  • BGP-VPNv6地址族视图

BGP多进程(华三)

一台BGP路由器上可以同时启动多个BGP进程,每个BGP进程对应一个BGP实例。BGP为不同的BGP实例维护独立的路由表。

BGP对BGP实例具有如下要求:

  • 一个BGP实例下可以创建多个公网地址族,但不同BGP实例下不能创建相同的公网地址族(公网IPv4单播地址族、公网IPv6单播地址族、公网VPNv4和公网VPNv6地址族除外)。
  • 一个BGP实例下可以创建多个VPN实例,每个VPN实例下可以创建多个地址族,但不同BGP实例下不能创建相同的VPN实例。
  • 不同BGP实例对

华为设备BGP相关配置

BGP配置任务概览

\1. 配置BGP的基本功能:配置BGP的基本功能是组建BGP网络的基础,是能够使用BGP其他功能的前提。

\2. 配置BGP安全性:在BGP网络中,非法用户可以通过篡改数据报文或者伪装成认证用户攻击BGP网络。为了解决BGP网络承载的业务的安全性问题,可以配置BGP MD5认证或BGP Keychain认证。

3. 监控IBGP网络连接: 在BGP网络中,非法用户可以通过篡改数据报文或者伪装成认证用户攻击BGP网络。为了解决BGP网络承载的业务的安全性问题,可以配置BGP MD5认证或BGP Keychain认证。

4. 配置BGP路由选路和负载分担: 在BGP路由表中,到达同一目的地可能存在多条路由。为了指导路由选路,BGP规定了下一跳策略和路由选路规则,其中下一跳策略的优先级比BGP路由选路规则高。在执行完下一跳策略后,BGP使用选路规则进行路由选择。

网络中到达同一目的地通常会存在多条有效路由,如果BGP只将最优路由发布给对等体,这样就造成很多流量负载不均衡的情况。通过配置BGP负载分担,可以使流量负载均衡,减少网络拥塞。

5. 控制BGP路由的发布和接收:随着网络的日益扩大,路由表激增导致网络负担越来越重,网络安全问题也越来越多。通过路由策略来对路由进行筛选,只发送和接收需要的BGP路由,可以解决上述问题。此外,到达同一个目的地址,可能存在多条路由。如果这些路由分别需要穿越不同的AS,把业务流量引导向某些特定的AS,也可以对发布的路由进行筛选。

6. 配置调整BGP网络的收敛速度:当需要BGP快速感知网络中的变化时,可以配置加快BGP网络的收敛速度。当需要减少防止路由振荡对网络的影响、减轻设备负担时,可以配置减慢BGP网络的收敛速度。

7. 配置BGP可靠性:为了保证BGP网络发生故障时的业务不长时间中断,可以采用备份主控板和备份链路的方案。但BGP自带的机制检测到故障和主备倒换所需时间比较长,超过1秒钟。为了保证语音等对时延敏感的业务的用户不感知业务中断,可以使用BGP Tracking、BGP与BFD联动功能实现故障快速感知,同时使用BGP Auto FRR和BGP GR功能实现故障感知后的快速主备倒换。

\8. 配置BGP路由聚合:在中型或大型BGP网络中,BGP路由表会变得十分庞大,存储路由表占用大量的设备内存资源,传输和处理路由信息需要占用大量的网络资源。使用路由聚合(Routes Aggregation)不仅可以减小路由表的规模,还可以隐藏一些具体的路由,减少路由震荡对网络带来的影响。其中,虽然BGP自动路由聚合配置方便,但只能将路由聚合为自然网段的路由。BGP手动路由聚合可以结合灵活的路由策略,使BGP更有效的传递和控制路由。

\9. 配置向对等体发送缺省路由:在中型或大型BGP网络中,BGP路由表会变得十分庞大,存储路由表占用大量的设备内存资源,传输和处理路由信息需要占用大量的网络资源。当对等体的BGP路由表中的多条路由都只是由本端发送时,可以在本端配置向对等体发送缺省路由功能。这时无论本端的路由表中是否存在缺省路由,都会向对等体发布一条下一跳地址为本地地址的缺省路由。再使用路由策略使本端向对等体只发送该条缺省路由后,将很大程度地减少网络路由数量,节省对等体的内存资源与网络资源。

10. 配置MP-BGP:传统的BGP-4只能管理IPv4单播网络的路由信息,无法支持IPv6、组播等其它网络的AS间路由的传播。为了提供对多种网络层协议的支持,IETF对BGP-4进行了扩展,形成MP-BGP,目前的MP-BGP标准是RFC4760(Multiprotocol Extensions for BGP-4,BGP-4的多协议扩展)。其中MP-BGP对IPv6网络的支持特性称为BGP4+,对组播网络的支持特性称为MBGP(Multicast BGP)。

华为CE系列交换机BGP默认参数

display default-parameter bgp

BGP version : 4

EBGP preference : 255

IBGP preference : 255

Local preference : 255

BGP connect-retry : 32s

BGP holdtime : 180s

BGP keepAlive : 60s

EBGP route-update-interval: 30s

IBGP route-update-interval: 15s

Default local-preference : 100

Default MED : 0

IPv4-family unicast : enable

EBGP-interface-sensitive : enable

IBGP-interface-sensitive : disable

Reflect between-clients : enable

Check-first-as : enable

Synchronization : disable

Private-4-byte-as : disable

Nexthop-resolved rules :

​ IPv4-family : unicast(ip)

​ label-route(ip)

​ multicast(ip)

​ vpn-instance(tunnel)

​ vpnv4(ip)

​ IPv6-family : unicast(ip)

​ vpn-instance(tunnel)

​ vpnv6(ip)

​ 6PE(tunnel)

BGP L2VPN-family EVPN :

​ BUM Flow Forward Mode : Ingress Replication

​ Tunnel Type : VXLAN

配置BGP的基本功能

(可选)配置BGP 4字节AS号的显示格式

缺省情况下,BGP的4字节AS号的显示格式为点分形式(即x.y格式)。如果用户习惯于使用整数形式的4字节AS号,那么可以执行该配置任务将4字节AS号的显示格式从点分形式切换到整数形式。

整数形式的4字节AS号和点分形式的4字节AS号的换算关系是:整数形式的4字节AS号=x65536+y,例如点分形式的4字节AS号2.3,对应的整数形式的4字节AS号为:265536+3=131075。

as-notation plain命令用来配置BGP 4字节AS号的显示格式为整数形式。

undo as-notation plain命令用来配置BGP 4字节AS号的显示格式为点分形式。

缺省情况下,BGP 4字节AS号的显示格式为点分形式,即x.y格式。

启动BGP进程

bgp命令用来启动BGP,进入BGP视图。

undo bgp命令用来关闭BGP。

缺省情况下,BGP是关闭的。

配置BGP对等体

peer { ipv4-address | ipv6-address } as-number as-number

配置BGP对等体组

在大型BGP网路中,对等体的数目众多,配置和维护极为不便。对于存在相同配置的BGP对等体,可以将它们加入一个BGP对等体组进行批量配置,简化管理的难度,并提高路由发布效率。

当需要将EBGP对等体加入同一对等体组时,需先配置BGP对等体,再加入组中。

group group-name [ external | internal ],创建对等体组

执行命令peer { ipv4-address | ipv6-address } group group-name,向对等体组中加入对等体。

配置BGP引入路由

BGP协议本身不发现路由,因此需要将其他路由(如IGP路由等)引入到BGP路由表中,从而将这些路由在AS之内和AS之间传播。BGP协议支持通过以下两种方式引入路由:

Import方式:按协议类型,将RIP路由、OSPF路由、ISIS路由等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。

Network方式:逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确。

Bgp 100

​ Ipv4-family unicast

​ 行命令import-route protocol [ process-id ] [ med med | route-policy route-policy-name ] *,配置BGP引入其他协议的路由。

执行命令network ipv4-address [ mask | mask-length ] [ route-policy route-policy-name ],或network ipv6-address prefix-length [ route-policy route-policy-name ],配置BGP逐条引入IPv4路由表或IPv6路由表中的路由。

配置BGP安全性

配置MD5认证

BGP使用TCP作为传输协议,只要TCP数据包的源地址、目的地址、源端口、目的端口和TCP序号是正确的,BGP就会认为这个数据包有效,但数据包的大部分参数对于攻击者来说是不难获得的。为了保证BGP协议免受攻击,可以在BGP邻居之间使用MD5认证或者Keychain认证来降低被攻击的可能性。其中MD5算法配置简单,配置后生成单一密码,需要人为干预才可以更换密码。

BGP使用TCP作为传输层协议,为提高BGP的安全性,可以在建立TCP连接时进行MD5认证。BGP的MD5认证并不能对BGP报文认证,它只是为TCP连接设置MD5认证密码,由TCP完成认证。如果认证失败,则不建立TCP连接。

peer 10.1.1.2 password cipher Huawei

如果对等体上使用peer password命令配置了认证,对等体组也使用peer password命令配置了认证,现在要将对等体加入对等体组,并且要求对等体继承组的认证方式,建议先使用undo peer password命令删除对等体的配置,然后使用peer group命令讲对等体加入对等体组。

配置BGP路由选路和负载负担

配置BGP协议优先级

由于交换机上可能同时运行多个动态路由协议,就存在各个路由协议之间路由信息共享和选择的问题。系统为每一种路由协议设置一个缺省优先级。在不同协议发现同一条路由时,优先级高的路由将被优选。

执行命令preference { external internal local | route-policy route-policy-name },设定BGP的协议优先级。

缺省情况下,BGP的协议优先级为255。

配置优先级的值越小,优先级越高。

BGP有三种路由:

从外部对等体学到的路由(EBGP)

从内部对等体学到的路由(IBGP)

本地产生的路由(Local Originated),是指通过聚合命令(summary automatic自动聚合和aggregate手动聚合)所聚合的路由。

可以为这三种路由设定不同的优先级。

另外,还可以通过应用路由策略,为符合匹配条件的特定路由配置优先级。对于不符合匹配条件的路由,则使用缺省优先级。

配置Next_Hop属性

当ASBR将从EBGP邻居学到的路由转发给IBGP邻居时,默认不修改下一跳。IBGP邻居收到该路由后,会发现下一跳不可达,于是将该路由设为非活跃路由,不通过该路由指导流量转发。当希望IBGP邻居通过该路由指导流量转发时,可以在ASBR上配置向IBGP对等体(组)转发路由时,将自身地址作为下一跳。这时,IBGP邻居收到ASBR从EBGP邻居学习来的路由后,发现下一跳可达,于是将路由设为活跃路由。

当BGP路由发生变化时,BGP需要对非直连的下一跳重新进行迭代。如果不对迭代后的路由进行任何限制,则BGP可能会将下一跳迭代到一个错误的转发路径上,从而造成流量丢失。此时,可配置BGP按路由策略迭代下一跳,避免流量丢失。

执行命令peer { ipv4-address | group-name | ipv6-address } next-hop-local,配置BGP设备向IBGP对等体(组)发布路由时,把下一跳地址设为自身的IP地址。

缺省情况下:

BGP向EBGP对等体通告路由时,将下一跳属性设为自身与对等体相连的接口地址。

BGP从EBGP向IBGP对等体通告非标签路由时,不改变下一跳属性,通告标签路由时,将下一跳属性改为自身与对等体相连的接口地址。

BGP从IBGP向IBGP对等体通告路由时,不改变下一跳属性。

BGP将本地始发路由发布给IBGP对等体时,将下一跳属性设为自身与对等体相连的接口地址。

执行peer next-hop-local命令后,设备向IBGP对等体/对等体组通告路由时,把下一跳属性设为自身的IP地址。

peer next-hop-local命令仅应用于IBGP对等体间。

nexthop third-party命令用来配置在特定场景下,BGP Speaker向对等体发布路由时,不修改下一跳地址。这些特定场景包括:

从直连邻居学来的路由,发送给直连EBGP邻居,原始下一跳与本地和对端建立BGP邻居关系的接口地址在同一网段,且直连接口均为广播口;

本地引入的路由,发送给直连IBGP或EBGP邻居,引入路由迭代下一跳与本地和对端建立BGP邻居关系的接口地址在同一网段,且直连接口均为广播口。

undo nexthop third-party命令用来恢复缺省设置。

缺省情况下:

从直连邻居学来的路由,发送给直连EBGP邻居时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址;

本地引入的路由,发送给直连IBGP或EBGP邻居时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。

配置BGP路由信息的首选值

协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效。当BGP路由表中存在到相同目的地址的路由时,将优先选择协议首选值高的路由

peer { group-name | ipv4-address | ipv6-address } preferred-value value 整数形式,取值范围是0~65535。

为从指定对等体学来的所有路由配置首选值。

缺省情况下,从对等体学来的路由的初始首选值为0。

配置本机缺省Local_Pref属性

Local_Pref属性用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到到AS外的目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。

default local-preference命令用来配置BGP的缺省本地优先级。缺省情况下,BGP本地优先级的值为100。

配置AS_Path属性

AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。配置不同的AS_Path属性功能,可以实现灵活的路由选路。

缺省情况下,AS_Path属性内AS_Path数量作为BGP选路条件。当不需要AS_Path属性作为选路条件时,可以配置不将AS_Path属性作为选路条件。

缺省情况下,BGP通过AS号检测路由环路。但在Hub and Spoke组网方式下,为保证路由能够正确传递,从Hub-CE发布私网路由到Spoke-CE途中经过的相关BGP对等体需要配置允许AS_Path中AS号重复1次的路由通过。

公有AS号可以直接在Internet上使用,私有AS号直接发布到Internet上可能造成环路现象。为了解决上述情况,可以在把路由发布到Internet前,配置发送EBGP更新报文时,AS_Path属性中仅携带公有AS编号。

在重构AS_Path或聚合生成新路由时,可以对AS_Path中的AS号最大个数予以限制。配置AS_Path属性中AS号的最大个数后,接收路由时会检查AS_Path属性中的AS号是否超限,如果超限则丢弃路由。

缺省情况下,一个设备只支持一个BGP进程,即只支持一个AS号。但是在某些特殊情况下,例如网络迁移更换AS号的时候来为了保证网络切换的顺利进行,可以为指定对等体设置一个伪AS号。

缺省情况下,设备会检查所有EBGP对等体发来的更新消息中AS_Path列表的第一个AS号,确认第一个AS号必须是该EBGP对等体所在的AS。否则,该更新信息被拒绝,EBGP连接中断。如果不需要设备检查所有EBGP对等体发来的更新消息中AS_Path列表的第一个AS号,可以去使能此功能。

apply as-path

命令用来在路由策略中配置改变BGP路由的AS_Path属性的动作。

apply as-path { { as-number-plain | as-number-dot } &<1-63> { additive | overwrite | delete } | none overwrite }

当BGP路由需要改变AS_Path属性来参与路由选择的竞争时,可以应用包含apply as-path命令的路由策略,改变匹配成功的BGP路由的AS_Path属性。

AS_Path属性是BGP的私有属性,记录了某条路由从本地到目的地址所要经过的所有AS编号,通过应用AS_Path属性可以控制路由选择及防止路由环路。当到达同一目的地存在多条路由时,BGP会比较路由的AS_Path属性,AS_Path列表较短的路由将被认为是最佳路由。

配置此命令后,符合匹配条件的BGP路由的AS_Path列表将会改变。假设原来AS_Path为(30,40,50),在符合匹配条件的情况下:

如果配置了apply as-path 60 70 80 additive命令,则AS_Path列表更改为(60,70,80,30,40,50)。这种配置一般用于调整使路由不被优选。

如果配置了apply as-path 60 70 80 overwrite命令,则AS_Path列表更改为(60,70,80)。更改AS_Path的应用比较灵活,主要有以下几种情况:

隐藏路由的真实路径信息。比如,AS_Path列表更改为(60,70,80)之后,路由就丢失了原来携带的AS_Path路径信息(30,40,50)。

用于形成负载分担。比如,设备收到两条路由,目的地址都是10.1.0.0/16这个网络,其中一条路由的AS_Path为(60,70,80),另一条路由的AS_Path为(30,40,50),如果把AS_Path(30,40,50)更改为(60,70,80),那么这两条路由就有可能形成负载分担。

如果配置了as-path-limit命令,接收路由时会检查AS_Path属性中的AS号是否超限,如果超限则丢弃路由。这样对于AS_Path较长的路由,在接收之前,可以把AS_Path替换成较短的AS_Path。例如原来的AS_Path为(60,70,80,65001,65002,65003),可以配置apply as-path 60 70 80 overwrite命令,把AS_Path列表更改为(60,70,80),缩短AS_Path的长度,防止路由由于AS号超限而被丢弃。

缩短AS_Path长度,使路由被优选,把流量引导向本自治系统。

如果配置了apply as-path none overwrite命令,则AS_Path列表更改为空。BGP在选路时,如果AS_Path列表为空,AS_Path长度按照0来处理。通过清空AS_Path,不但可以隐藏真实的路径信息,还可以缩短AS_Path长度,使路由被优选,把流量引导向本自治系统。

bestroute as-path-ignore

bestroute as-path-ignore命令用来配置BGP在选择最优路由时忽略AS路径属性。

缺省情况下,BGP将AS路径属性作为选择最优路由的一个条件。

配置该命令后,BGP将不比较AS路径的长度。缺省情况下,长度较小者优先。

执行命令bestroute as-path-ignore之后,AS_Path属性不作为BGP选路条件。

as-path-limit配置AS_Path属性中AS号的最大个数。

缺省情况下,AS_Path属性中AS号的最大个数是255。

配置MED属性

MED属性相当于IGP使用的度量值(Metrics),它用于判断流量进入AS时的最佳路由。当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。

执行命令default med med,配置缺省MED值。

缺省情况下,MED的值为0。

执行命令bestroute med-none-as-maximum,设置当路由没有MED值时将其作为最大值处理。

缺省情况下,当路由属性中没有MED值时,BGP在选路时将使用缺省MED值。

执行命令compare-different-as-med,允许BGP比较属于任意AS的EBGP对等体的路由的MED值。

缺省情况下,BGP只比较属于同一AS的EBGP对等体的路由的MED属性值

执行命令bestroute med-plus-igp [ igp-multiplier igp-multiplier | med-multiplier med-multiplier ] *,配置BGP在需要比较MED值来选择最优路由时,将MED值与IGP Metric分别乘对应系数相加作为结果进行比较。

缺省情况下,MED值与IGP Metric作为单独的BGP选路条件参与选路。

配置BGP团体属性

团体属性是BGP的私有属性,在BGP对等体之间传播,且不受AS的限制。利用团体属性可以使多个AS中的一组BGP设备共享相同的策略,从而简化路由策略的应用和降低维护管理的难度。BGP设备可以在发布路由时,新增或者改变路由的团体属性。

apply community命令用来在路由策略中配置改变BGP路由团体属性的动作。

apply community { community-number | aa:nn | internet | no-advertise | no-export | no-export-subconfed } &<1-32> [ additive ]

表示删除路由的所有团体属性。 -  
community-number \ aa:nn 指定团体属性中的团体号。一条命令中最多可以配置32个团体号。 如果不配置internetno-export-subconfedno-advertiseno-export,则community-numberaa:nn一共可以指定32个。 如果配置internetno-export-subconfedno-advertiseno-export中的一个,则community-numberaa:nn一共可以指定31个。 如果配置internetno-export-subconfedno-advertiseno-export中的两个,则community-numberaa:nn一共可以指定30个。 如果配置internetno-export-subconfedno-advertiseno-export中的三个,则community-numberaa:nn一共可以指定29个。 如果配置internetno-export-subconfedno-advertiseno-export,则community-numberaa:nn一共可以指定28个。 整数形式,community-number的取值范围是0~4294967295,aann的取值范围都是0~65535。
internet 表示可以向任何对等体发送匹配的路由。缺省情况下,所有的路由都属于Internet团体。 -
no-advertise 表示不向任何对等体发送匹配的路由。即收到具有此属性的路由后,不能发布给任何其他的BGP对等体。 -
no-export 表示不向AS外发送匹配的路由,但发布给其它子自治系统。即收到具有此属性的路由后,不能发布到本地AS之外。 -
no-export-subconfed 表示不向AS外发送匹配的路由,也不发布给其它子自治系统。即收到具有此属性的路由后,不能发布给任何其他的子自治系统。 -
additive 表示追加路由的团体属性。

路由策略中配置apply community命令,则通过该策略的BGP路由,其团体属性将按照策略中的配置进行相应变更。

假设原BGP路由的团体属性为30,在符合过滤条件的情况下,替换或追加AS的规则举例如下:

如果配置了apply community 100命令,则团体属性更改为100。

如果配置了apply community 100 150命令,则团体属性更改为100,150。

如果配置了apply community 100 150 additive命令,则团体属性更改为30,100,150。

如果配置了apply community none命令,则BGP路由的团体属性被删除。

配置BGP负载分担

在大型网路中,到达同一目的地通常会存在多条有效路由,但是BGP只将最优路由发布给对等体,这一特点往往会造成很多流量负载不均衡的情况。通过配置BGP负载分担,可以流量负载均衡,减少网络拥塞。

一般情况下,只有“BGP选择路由的策略”所描述的前8个属性完全相同,BGP路由之间才能相互等价,实现BGP的负载分担。但路由负载分担的规则也可以通过配置来改变,如忽略路由AS-Path属性的比较,但这些配置需要确保不会引起路由环路。

公私网互引路由和本地交叉路由不能进行负载分担。

如果实现了BGP负载分担,则不论是否配置了peer next-hop-local命令,本地设备向IBGP对等体组发布路由时都先将下一跳地址改变为自身地址。

maximum load-balancing命令用来设置形成负载分担的等价路由的最大条数。

整数形式,取值范围是1~64

应用场景

配置该命令可以使多条BGP等价路由形成负载分担,以达到负载均衡的目的,实现网络资源的合理利用。

配置该命令后,满足如下所有条件的多条BGP路由会成为等价路由,形成负载分担:

  • 原始下一跳不相同;
  • 首选值(PrefVal)相同;
  • 本地优先级(Local_Pref)相同;
  • 都是聚合路由,或者都不是聚合路由;
  • Origin类型(IGP、EGP、Incomplete)相同;
  • MED值相同;
  • 都是EBGP路由或都是IBGP路由;
  • AS内部IGP的Metric相同;
  • AS_Path属性完全相同。

配置maximum load-balancing ebgp number命令后,仅EBGP路由形成负载分担;配置maximum load-balancing ibgp number命令后,仅IBGP路由形成负载分担。不配置[ ebgp | ibgp ]参数时,EBGP路由和IBGP路由都可以形成负载分担,且形成负载分担的路由条数相同。

缺省情况下,执行maximum load-balancing number命令后,BGP在向对等体发布路由时,无论该路由是否形成负载分担,都将下一跳修改为自己。配置ecmp-nexthop-changed参数,可以使BGP只在发布形成负载分担的路由时才修改下一跳为自己;而在发布没有形成负载分担的路由时,不对下一跳作特殊处理,即原始下一跳与没有配置负载分担时发布的下一跳保持一致。

控制BGP路由的发布和接收

控制BGP路由信息的发布

BGP路由表路由数量通常比较大,传递大量的路由对设备来说是一个很大的负担,为了减小路由发送规模,需要对发布的路由进行控制,只发送自己想要发布的路由或者只发布对等体需要的路由。另外,到达同一个目的地址,可能存在多条路由,这些路由分别需要穿越不同的AS,为了把业务流量引导向某些特定的AS,也需要对发布的路由进行筛选。

配置BGP对全局发布的路由信息进行过滤。

基于访问控制列表ACL:filter-policy { acl-number | acl-name acl-name } export [ protocol [ process-id ] ]或者filter-policy { acl6-number | acl6-name acl6-name } export [ protocol [ process-id ] ]

基于地址前缀列表:filter-policy ip-prefix ip-prefix-name export [ protocol [ process-id ] ]或者filter-policy ipv6-prefix ipv6-prefix-name export [ protocol [ process-id ] ]

控制BGP路由信息的接收

当设备遭到恶意攻击或者网络中出现错误配置时,会导致BGP从邻居接收到大量的路由,从而消耗大量设备的资源。因此管理员必须根据网络规划和设备容量,对运行时所使用的资源进行限制。BGP提供了基于对等体的路由控制,限定邻居发来的路由数量,这样可以避免上述问题。

置BGP对从全局接收的路由信息进行过滤。

基于访问控制列表ACL:filter-policy { acl-number | acl-name acl-name } import或者filter-policy { acl6-number | acl6-name acl6-name } import

基于地址前缀列表:filter-policy ip-prefix ip-prefix-name import或者filter-policy ipv6-prefix ipv6-prefix-name import

配置BGP软复位

BGP的入口策略改变后,为了使新的策略立即生效,可以复位BGP连接,但这样会造成短暂的BGP连接中断。BGP支持手工对BGP连接进行软复位,可在不中断BGP连接情况下完成路由表的刷新。对于不支持软复位的BGP对等体,可以同时配置保留该对等体的所有原始路由功能,在不复位BGP连接的情况下完成路由表的刷新。

对于支持Route-refresh能力的BGP对等体,同时配置手工对BGP连接进行软复位,可在不中断BGP连接情况下完成路由表的刷新。

peer { group-name | ipv4-address } capability-advertise { 4-byte-as | route-refresh | conventional }

peer ipv6-address capability-advertise { 4-byte-as | route-refresh }

peer capability-advertise命令用来使能BGP的发布可选能力。缺省情况下,BGP路由刷新功能和4字节AS号功能处于使能状态。

refresh bgp命令用来手工对BGP连接进行软复位。

对于邻居是支持Route-refresh的设备,可以执行refresh bgp命令手工对BGP连接进行软复位,BGP软复位可以在不中断BGP连接的情况下重新刷新BGP路由表,并应用新的策略。

前置条件

配置BGP软复位要求BGP对等体支持Route-refresh能力。

peer keep-all-routes命令用来保存自BGP连接建立起来之后的所有来自指定对等体(组)的BGP路由更新信息。

缺省情况下,只保存来自对等体的通过已配置入口策略的BGP路由更新信息。

应用场景

BGP的入口策略改变后,为了使新的策略立即生效,可以复位BGP连接,但这样会造成短暂的BGP连接中断。对于不支持Route-Refresh能力的BGP对等体,可以配置peer keep-all-routes命令,保留该对等体的所有原始路由,这样不需要复位BGP连接即可完成路由表的刷新。

注意事项

如果交换机不支持Route-refresh能力,则需要在本地和对等体上均配置该命令。第一次配置peer keep-all-routes命令后会导致与对等体会话重新连接。

如果交换机支持Route-refresh能力,配置该命令后,不会导致与对等体的会话重新连接,但交换机通过执行refresh bgp命令刷新路由表功能将不会生效。

执行keep-all-routes命令后,再执行undo peer keep-all-routes命令不会生效。此时,需要先执行undo keep-all-routes命令,再执行peer keep-all-routes命令才可以配置此功能。

配置调整BGP网络的收敛速度

配置BGP连接重传定时器

BGP发起TCP连接后,如果成功建立起TCP连接,则关闭连接重传定时器。如果TCP连接建立不成功,则会在连接重传定时器超时后重新尝试建立连接。

设置较小的连接重传定时器,可以减少等待下次连接建立的时间,加快连接失败后重新建立的速度。

设置较大的连接重传定时器,可以减小由于邻居反复震荡引起的路由振荡。

BGP支持在全局或者单个对等体(组)配置连接重传定时器。定时器生效的优先级是单个对等体高于对等体组,对等体组高于全局。

timer connect-retry命令用来配置全局连接重传时间间隔。

缺省情况下,连接重传时间间隔是32秒。

配置BGP存活时间和保持时间定时器

BGP的Keepalive消息用于维持BGP连接关系。

减小存活时间和保持时间,BGP可以更快速的检测到链路的故障,有利于BGP网络快速收敛。但是过短的保持时间会导致网络中的Keepalive消息会增多,使得设备的负担加重,并且会占用一定的网络带宽。

增大存活时间和保持时间,可以减轻设备负担和减少网络带宽的占用。但是过长的保持时间会导致网络中的Keepalive消息减少,使得BGP不能及时检测到链路状态的变化,不利于BGP网络快速收敛,还可能会造成流量损失。

BGP支持在全局或者单个对等体(组)配置存活时间和保持时间定时器。定时器生效的优先级单个对等体高于对等体组,对等体组高于全局。

timer命令用来配置BGP的存活时间与保持时间间隔。

缺省情况下,存活时间为60秒,保持时间为180秒。

配置更新报文定时器

BGP协议不会定期更新路由表,当BGP路由发生变化时,会通过Update消息增量地更新路由表。

减小更新报文时间,BGP可以更快速的检测到路由变化,有利于BGP网络快速收敛。但是过短的更新报文时间会导致网络中的Update消息会增多,使得设备的负担加重,并且会占用一定的网络带宽。

增大更新报文时间,可以减轻设备负担和减少网络带宽的占用,避免不必要的路由震荡。但是过长的保持时间会导致网络中的Update消息减少,使得BGP不能及时检测到路由的变化,不利于BGP网络快速收敛,还可能会造成流量损失。

peer route-update-interval命令用来配置向对等体(组)发送相同路由前缀更新报文(Update报文)的时间间隔。

缺省情况下,IBGP对等体的路由更新时间间隔为15秒,EBGP对等体的路由更新时间间隔为30秒。

配置EBGP连接快速复位

EBGP连接快速复位功能缺省情况下是使能的,目的是为了使BGP协议不必等待保持时间定时器超时,而立即快速响应接口故障,删除接口上的EBGP直连会话,便于BGP快速收敛。

但是如果EBGP连接所使用的接口状态反复变化,EBGP会话就会反复重建与删除,造成网络震荡。这时,可以去使能EBGP连接快速复位功能。BGP协议会等待保持时间定时器超时,才会删除接口上的EBGP直连会话,这样就在一定程度上抑制了BGP网络震荡,同时在一定程度上节约了网络带宽。

执行命令undo ebgp-interface-sensitive,去使能EBGP连接快速复位。

EBGP连接快速复位功能缺省情况下是使能的。

接口故障恢复后,BGP协议依靠自身状态机机制来恢复会话。

该命令适用于EBGP连接所使用的接口状态不断变化的场合。如果接口状态恢复稳定,建议立即执行ebgp-interface-sensitive命令恢复缺省配置,使能EBGP连接快速复位功能。

配置BGP路由震荡抑制

路由振荡(Route flapping)指路由表中的某条路由反复消失和重现。一般情况下,BGP都应用于复杂的网络环境中,路由变化十分频繁。而频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正常工作。通过配置EBGP或者IBGP路由振荡抑制功能可防止持续路由振荡带来的不利影响。

BGP可以按策略区分路由,对不同的路由采用不同的Dampening参数进行抑制。例如,实际网络中,对掩码较长的路由设置较长的抑制时间,而对掩码较短的(例如8位掩码长度)路由,则采用相对较短的抑制时间。

dampening命令用来使能BGP路由振荡抑制或修改各种BGP路由振荡抑制参数。

缺省情况下,BGP路由振荡抑制未使能。

应用场景

BGP振荡抑制使用惩罚值来衡量一条路由的稳定性,惩罚值越高则说明路由越不稳定。路由每发生一次振荡,即交换机收到该路由的Withdraw报文时,BGP便会给此路由增加一定的惩罚值(1000),收到路由更新时也会给此路由增加一定的惩罚值(500)。

当惩罚值超过抑制阈值时,此路由被抑制,不加入到IP路由表中,交换机也不再向其他BGP对等体发布更新报文。如果该路由被打上d标志,说明交换机最后收到的是Update报文;如果该路由被打上h标志,说明交换机最后收到的是Withdraw报文。惩罚值增加到一定程度之后,便不会再增加,这个值称为惩罚上限值。

同时,被抑制的路由每经过一段时间,惩罚值便会减少一半。如果是d标志的路由,当惩罚值降到再使用阈值时,此路由会被去掉d标记,变为可用并被优选后加入到IP路由表中,同时向其他BGP对等体发布更新报文。如果是h标志的路由,当惩罚值降为0时,此路由会从BGP路由表中删除。

配置BGP路由振荡抑制功能后,使用命令行中的任何参数都可以起到抑制振荡路由的作用,调整参数的目的是按照不同的抑制时间诉求进行调整。若想增加振荡路由的抑制时间,可以通过如下方式实现(反之,则可以减小抑制时间):

增加ceiling的取值;

增加half-life-reach的取值;

减小reuse的取值。

d标志和h标志可以通过命令display bgp routing-table label查看,分别表示该路由已经被抑制和曾经被抑制。

注意事项

dampening命令为覆盖式命令。

执行dampening命令后,系统抑制不稳定的路由,不将这类路由加入到BGP路由表中,也不将这类路由向其他BGP对等体发布。

配置BGP路由振荡抑制时,需注意如下事项:

所指定的reusesuppressceiling三个阈值是依次增大的,即必须满足:reuse<suppress<ceiling

根据公式MaxSuppressTime=half-life-reach×60×(ln(ceiling/reuse)/ln(2)),如果MaxSuppressTime小于1就不能抑制。所以要保证MaxSuppressTime大于等于1,即必须满足:ceiling/reuse足够大。

配置BGP可靠性

配置BFD For BGP

BGP协议通过周期性的向对等体发送Keepalive报文来实现邻居检测。但这种机制检测到故障所需时间比较长,超过1秒钟。当数据达到吉比特速率级时,这么长的检测时间将导致大量数据丢失,无法满足电信级网络高可靠性的需求。为了解决上述问题,BGP协议引入了BGP与BFD联动功能。BFD检测是毫秒级,可以在50ms内通报BGP对等体间链路的故障,因此能够提高BGP路由的收敛速度,保障链路快速切换,减少流量损失。

当对等体加入了对等体组,且这个对等体组使能了BFD特性,对等体将会继承该对等体组的BFD特性,创建BFD会话。如果不希望对等体从对等体组继承BFD特性,可以配置peer bfd block命令,阻止对等体从对等体组中继承BFD功能。

默认情况下,华为设备之间IBGP为多跳会话。建议华为设备和默认IBGP为单跳会话的其他厂商设备对接时,只配置IGP与BFD联动会话或者只配置IBGP与BFD联动会话。

peer bfd enable命令用来使能对等体(组)的BFD功能。

缺省情况下,对等体(组)的BFD功能未使能。

BGP Auto FRR

在传统的IP网络上,通常从检测到链路故障发生到路由系统完成路由收敛,要经历几秒钟的时间。对于网络上某些对延时、丢包等非常敏感的业务来说,秒级的收敛时间是不能忍受的,因为这将导致当前业务的中断。比如VoIP业务所能容忍的网络中断时间为毫秒级。BGP Auto FRR功能在当物理层或链路层检测到故障后,实现毫秒级收敛,降低对承载业务的影响。

auto-frr命令用来使能BGP Auto FRR功能。

配置BGP GR

当BGP协议重启时会导致对等体关系重新建立和转发中断,使能平滑重启GR(Graceful Restart)功能后可以避免流量中断。

http://localhost:7890/pages/31189183/08/31189183/08/resources/public_sys-resources/icon-note.gif说明:

目前,设备仅支持GR Helper,GR Restart的功能由新功能NSR代替,NSR无需配置。

执行命令graceful-restart,使能BGP协议的GR功能。

缺省情况下,BGP协议的GR功能未使能

配置BGP路由聚合

配置BGP自动聚合

IPv4网络中BGP支持自动聚合和手动聚合两种聚合方式,自动聚合的路由优先级低于手动聚合的路由优先级。

summary automatic命令用来使能对本地引入的路由进行自动聚合功能。

在BGP-IPv4单播地址族视图下,配置summary automatic命令对公网BGP本地引入的路由进行自动聚合。

在BGP-VPN实例IPv4地址族视图下,配置summary automatic命令对该私网BGP本地引入的路由进行自动聚合。

summary automatic命令对BGP引入的路由进行聚合,引入的路由可以是直连路由、静态路由、RIP路由、OSPF路由、IS-IS路由。配置该命令后,BGP将按照自然网段聚合路由(如10.1.1.0/24和10.2.1.0/24将聚合为A类地址10.0.0.0/8),并且BGP只向对等体发送聚合后的路由。这样可以减少路由信息的数量。

配置BGP手动聚合

aggregate命令用来在BGP路由表中创建一条聚合路由。

aggregate ipv4-address { mask | mask-length } [ as-set | attribute-policy route-policy-name1 | detail-suppressed | origin-policy route-policy-name2 | suppress-policy route-policy-name3 ] *

aggregate ipv6-address prefix-length [ as-set | attribute-policy route-policy-name1 | detail-suppressed | origin-policy route-policy-name2 | suppress-policy route-policy-name3 ] *

undo aggregate ipv4-address { mask | mask-length } [ as-set | attribute-policy route-policy-name1 | detail-suppressed | origin-policy route-policy-name2 | suppress-policy route-policy-name3 ] *

undo aggregate ipv6-address prefix-length [ as-set | attribute-policy route-policy-name1 | detail-suppressed | origin-policy route-policy-name2 | suppress-policy route-policy-name3 ] *

参数 参数说明 取值
ipv4-address 指定聚合路由的IPv4地址。 点分十进制形式。
mask 指定聚合路由的网络掩码。 点分十进制形式。
mask-length 指定聚合路由的网络掩码长度。 整数形式,取值范围是0~32。
ipv6-address 指定聚合路由的IPv6地址。 32位16进制数,格式为X:X:X:X:X:X:X:X。
prefix-length 指定聚合IPv6路由的前缀长度。 整数形式,取值范围是0~128。
as-set 指定生成具有AS-SET的路由。 -
attribute-policy route-policy-name1 指定设置聚合后路由的属性策略名称。 字符串形式,区分大小写,不支持空格,长度范围是1~40。当输入的字符串两端使用双引号时,可在字符串中输入空格。
detail-suppressed 指定仅通告聚合路由。 -
origin-policy route-policy-name2 指定允许生成聚合路由的策略名称。 字符串形式,区分大小写,不支持空格,长度范围是1~40。当输入的字符串两端使用双引号时,可在字符串中输入空格。
suppress-policy route-policy-name3 指定抑制指定路由通告的策略名称。 字符串形式,区分大小写,不支持空格,长度范围是1~40。当输入的字符串两端使用双引号时,可在字符串中输入空格。

应用场景

BGP路由聚合分为手动聚合和自动聚合两种,aggregate命令用于实现手动聚合。该命令可以对BGP本地路由表中的路由进行聚合。手动聚合后的路由的优先级高于自动聚合。

如果聚合路由中所包含的具体路由各Origin属性不相同,那么聚合路由的Origin属性按照优先级igp > egp > incomplete为准。聚合路由会携带原来所有具体路由中的团体属性。

通过设置关键字as-set,可创建一条聚合路由,该路由的自治系统AS(Autonomous System)路径包含了具体路由的AS路径信息。若需聚合较多AS路径时,请慎用此关键字,因为当具体路由的变化较频繁时,会导致路由振荡。

关键字detail-suppressed抑制该聚合路由所包含的所有具体路由,只发布该聚合路由。生成的聚合路由带Atomic-aggregate属性,并且不能携带原具体路由的团体属性。

关键字suppress-policy能产生聚合路由,但抑制指定路由的通告。可以用route-policyif-match子句有选择地抑制一些具体路由,即匹配该策略的路由将被抑制,但其他未通过策略的具体路由仍被通告。也可以通过peer route-policy命令,配置不希望发布给对等体的策略达到相同效果。

使用关键字origin-policy仅在匹配route-policy时才生成聚合路由。

关键字attribute-policy可设置聚合路由的属性。如果在策略中使用命令apply as-path配置了AS_Path属性,且aggregate命令设置了关键字as-set,那么策略中的apply as-path命令将不会生效。通过peer route-policy命令也可以完成同样的工作。

配置向对等体发送缺省路由

当对等体的BGP路由表中的多条路由都只是由本端发送时,可以在本端配置向对等体发送缺省路由功能。配置向对等体发送缺省路由功能后,无论本端的路由表中是否存在缺省路由,都向对等体发布一条下一跳地址为本地地址的缺省路由,从而很大程度地减少网络路由数量,节省对等体的内存资源与网络资源。

peer default-route-advertise命令用来配置BGP设备向对等体(组)发布缺省路由。

缺省路由一般应用于具有如下特点的网络中:

存在多个EBGP邻居,且从每个邻居都会收到全网路由。

存在多个路由反射器,从每个反射器都会收到全网路由。

网络未进行负载分担时,BGP对等体最多只接收一份活跃的全网路由;实现负载分担时,BGP对等体接收的活跃路由数量就会翻倍,导致网络路由数量剧增。在这样的网络中,通过配置向BGP对等体仅发布缺省路由,用缺省路由作负载分担,可以很大程度地减少网络路由数量。

配置BMP

BMP(BGP Monitoring Protocol)主要应用在存在监控服务器,需要对网络中设备的BGP运行状态进行监控。通过配置BMP,可以对网络中设备的BGP运行状态进行实时监控,包括对等体关系的建立与解除、路由信息刷新等。BMP的产生改变了以往只能通过人工查询方式来获得设备的BGP运行状态的状况,大大提高了网络监控的效率。

bmp命令用来启动BMP并进入BMP视图,或者直接进入BMP视图。

statistics-timer命令用来配置BMP向监控服务器上报BGP运行状态统计信息的时间间隔。缺省情况下,BMP向监控服务器上报BGP运行状态统计信息的时间间隔为3600s。

session命令用来配置BMP与监控服务器建立TCP连接的会话地址,并与监控服务器建立TCP连接。

tcp命令用来配置BMP与监控服务器建立TCP连接的连接信息。

维护BGP

复位BGP连接

当BGP路由策略(交换机不支持Router Refresh)发生变化后,需要通过复位BGP连接使新的配置生效。

在确认需要复位所有BGP连接后,请在用户视图下执行命令reset bgp all

在确认需要复位与指定AS之间的BGP连接后,请在用户视图下执行命令reset bgp { as-number-plain | as-number-dot }。

在确认需要复位与指定对等体的BGP连接后,请在用户视图下执行命令reset bgp ipv4-address

在确认需要复位所有EBGP连接后,请在用户视图下执行命令reset bgp external

在确认需要复位与指定对等体组的BGP连接后,请在用户视图下执行命令reset bgp group group-name

在确认需要复位所有IBGP连接后,请在用户视图下执行命令reset bgp internal

在确认需要复位指定对等体间的MBGP连接后,在用户视图下执行命令reset bgp multicast peer-address

在确认需要复位所有MBGP连接后,在用户视图下执行命令reset bgp multicast all

在确认需要复位同一对等体组内所有对等体间的MBGP连接后,在用户视图下执行命令reset bgp multicast group group-name

在确认需要复位外部连接后,在用户视图下执行命令reset bgp multicast external

在确认需要复位内部连接后,在用户视图下执行命令reset bgp multicast internal

清除BGP统计信息

在确认需要清除路由的振荡统计信息后,请在用户视图下执行命令reset bgp flap-info [ regexp as-path-regexp | as-path-filter { as-path-filter-number | as-path-filter-name } | network-address [ mask | mask-length ] ]。

在确认需要清除指定对等体的振荡统计信息后,请在用户视图下执行命令reset bgp ipv4-address flap-info

在确认需要清除路由的衰减信息并释放被抑制的路由后,请在用户视图下执行命令reset bgp dampening [ ipv4-address [ mask | mask-length ] ]。

在确认需要清除MBGP路由的衰减信息后,请在用户视图下执行命令reset bgp multicast dampening [ ip-address [ mask | mask-length ] ]。

在确认需要清除MBGP路由的振荡统计信息后,请在用户视图下执行命令reset bgp multicast flap-info [ ip-address [ mask | mask-length ] | as-path-filter { as-path-list-number | as-path-list-name } | regrexp regrexp ]

华三设备BGP相关配置

配置BGP基本功能

动态创建BGP对等体

设备需要和大量的邻居建立对等体关系时,如果逐个配置对等体关系,则配置工作量大,新增或者删除对等体的维护、升级工作难度较大,且容易出错。

如果设备的邻居位于同一个网段内,则可以通过BGP动态对等体功能简化配置。在设备上简单地配置一个网段地址内的邻居作为动态对等体,就可以接受来自该网段内的所有邻居的连接请求,并与其建立对等体关系。只有当邻居发起连接请求时,本地才会维护与该邻居的对等体关系;否则,不维护对等体关系。BGP动态对等体功能既简化了配置,又大大降低了维护和升级成本。

配置动态对等体时,设备和邻居只能有一端配置网段地址,另一端必须配置实际IP地址。

配置EBGP对等体组

根据对等体组中的对等体是否属于同一个外部AS,EBGP对等体组又可以分为纯EBGP对等体组和混合EBGP对等体组。如果对等体组中的对等体属于同一个外部AS,该对等体组就是纯EBGP对等体组;如果对等体组中的对等体属于不同外部AS,该对等体组就是混合EBGP对等体组。

用户有三种方式配置EBGP对等体组:

第一种方式是创建对等体组后,先指定对等体组的AS号,再将对等体加入到对等体组中,该方式下加入的对等体具有相同的AS号,均为对等体组的AS号。对等体加入对等体组之前可以配置AS号,且为对等体配置的AS号必须与对等体组的AS号相同。

第二种方式是创建对等体组后,先配置对等体的AS号,再将对等体加入对等体组中。该方式下,对等体组中对等体的AS号可以相同也可以不同。

第三种方式是创建对等体组后,将对等体加入对等体组的同时指定AS号。该方式下,对等体组中对等体的AS号可以相同也可以

group group-name external 创建EBGP对等体组

peer ipv4-address [ mask-length ] group group-name [ as-number as-number ] 向对等体组中添加指定的IPv4 BGP对等体

peer group-name description text (可选)配置对等体组的描述信息

配置建立TCP连接使用的源地址

BGP使用TCP作为其传输层协议。缺省情况下,BGP使用到达BGP对等体的最佳路由出接口的主IP地址或IPv6地址与对等体/对等体组建立TCP连接。在如下场合可以通过本配置指定建立TCP连接使用的源地址或源接口(即采用指定源接口的IP地址/IPv6地址与对等体/对等体组建立TCP连接):

当指定的对等体的IP地址/IPv6地址不是本地路由器与对等体之间直连接口的IP地址/IPv6地址时,需要在对等体上通过本配置将建立TCP连接使用的源接口指定为对等体IP地址/IPv6地址所在的接口。例如,本端设备通过接口A和对端设备的接口B相连,在本端使用peer x.x.x.x as-number as-number命令将对端指定为自己的对等体,但是x.x.x.x不是接口B的IP地址时,需要在对端设备上使用peer connect-interface命令配置源接口,指定源接口为IP地址x.x.x.x所在的接口。

当建立BGP会话的路由器之间存在冗余链路时,如果路由器上的一个接口发生故障,链路状态变为down,建立TCP连接的源地址可能会随之发生变化,导致BGP需要重新建立TCP连接,造成网络震荡。为了避免该情况的发生,建议网络管理员将建立TCP连接所使用的源地址配置为Loopback接口的地址,或将源接口配置为Loopback接口,以提高TCP连接的可靠性和稳定性。

当BGP对等体之间同时建立多条BGP会话时,如果没有明确指定建立TCP连接的源地址,可能会导致根据最优路由选择TCP连接源地址错误,并影响BGP会话的建立。如果多条BGP会话基于不同接口的IP地址建立,则建议用户在配置BGP对等体时,通过配置源接口或源地址明确指定每个BGP会话的TCP连接源地址;如果多条BGP会话基于同一接口的不同IP地址建立,则建议用户通过配置源地址,明确指定每个BGP会话的TCP连接源地址。

peer { group-name | ipv4-address [ mask-length ] } source-address source-ipv4-address

指定与对等体/对等体组创建BGP会话时建立TCP连接使用的源IP地址

peer { group-name | ipv4-address [ mask-length ] } connect-interface interface-type interface-number

指定与对等体/对等体组创建BGP会话时建立TCP连接使用的源接口

缺省情况下,BGP使用到达BGP对等体的最佳路由出接口的主IP地址与对等体/对等体组建立TCP连接

控制BGP路由信息的发布与接收

配置BGP路由聚合

在中型或大型BGP网络中,在向对等体发布路由信息时,可以配置路由聚合,减少发布的路由数量,并减小路由表的规模。IPv4 BGP支持自动聚合和手动聚合两种聚合方式,同时配置时,手动聚合的优先级高于自动聚合的优先级。IPv6 BGP只支持手动聚合。

BGP路由表中创建的聚合路由的出接口为Null0接口,聚合后可以减少向BGP对等体发布的路由数目。在使用中应注意不要使这条聚合路由成为本设备的优选路由,否则会导致报文转发失败。如果聚合路由的子网掩码长度和被聚合的某一条具体路由完全相同,且聚合路由优先级高于具体路由,则聚合路由会成为优选路由,这种情况下需要通过修改路由优先级等方式,来确保优选的路由为具体路由。

summary automatic 配置对引入的子网路由进行自动聚合

aggregate ipv4-address { mask-length | mask } [ as-set | attribute-policy route-policy-name | detail-suppressed | origin-policy route-policy-name | suppress-policy *route-policy-name ] ** 在BGP路由表中创建一条聚合路由

配置发布IP路由表中的最优路由

缺省情况下,BGP发布BGP路由表中的最优路由,不管该路由在IP路由表中是否为最优路由。通过本配置可以保证BGP发送出去的路由是IP路由表中的最优路由,以减少BGP发送的路由数量。

advertise-rib-active 在指定地址族视图下,配置发布IP路由表中的最优路由

缺省情况下,与BGP实例视图下的配置保持一致

配置优先发送缺省路由的更新信息

BGP路由器向对等体发送路由更新消息时,不会优先发送缺省路由的更新消息。当BGP邻居关系断开时,无法保证优先撤销缺省路由,如果需要撤销的路由数量较多,那么较长时间后才能撤销缺省路由,造成流量中断时间较长。配置BGP优先发送缺省路由更新,BGP路由器会将缺省路由作为第一条更新进行发送,在BGP邻居关系断开时,最大限度地减少流量中断时间。

default-route update-first 配置优先发送缺省路由的更新消息

缺省情况下,不优先发送缺省路由的更新消息

限制从BGP对等体/对等体组接收的路由数量

通过本配置可以避免攻击者向路由器发送大量的BGP路由,对路由器进行攻击。

当路由器从指定对等体/对等体组接收的路由数量超过指定的最大值时,可以选择以下处理方式:

路由器中断与该对等体/对等体组的BGP会话,不再尝试重建会话。

路由器保持与该对等体/对等体组的BGP会话,可以继续接收路由,仅打印日志信息。

路由器保持与该对等体/对等体组的BGP会话,丢弃超出限制的路由,并打印日志信息。

路由器中断与该对等体/对等体组的BGP会话,经过指定的时间后自动与对等体/对等体组重建会话。

执行本配置任务时,还可以指定路由器产生日志信息的阈值,即路由器接收的路由数量与配置的最大值的百分比达到指定的阈值时,路由器将产生日志信息。

peer { group-name | ipv4-address [ mask-length ] } route-limit prefix-number [ { alert-only | discard | reconnect *reconnect-time } | percentage-value ] **

配置允许从对等体/对等体组接收的路由的最大数量

缺省情况下,不限制从对等体/对等体组接收的路由数量

配置BGP路由信息的发布接收策略

配置BGP路由信息的发布/接收策略前,根据采取的策略,需要配置下列过滤器:

  • 访问控制列表
  • 地址前缀列表
  • 路由策略
  • AS路径过滤列表

用户可以根据需求选择过滤策略。如果同时配置了几种过滤策略,则按照如下顺序过滤发布的路由信息:

  • filter-policy export
  • peer filter-policy export
  • peer as-path-acl export
  • peer prefix-list export
  • peer route-policy export

用户可以根据需求选择过滤策略。如果同时配置了几种过滤策略,则按照如下顺序过滤接收的路由:

  • filter-policy import
  • peer filter-policy import
  • peer as-path-acl import
  • peer prefix-list import
  • peer route-policy import

配置BGP新增路由发布速率

网络中新增路由数量较大时,如果在短时间内发布大量路由,可能会导致BGP对等体已接收到新增路由并添加对应的转发表项,本地设备上的转发表项却尚未添加,从而导致流量转发失败。通过本功能合理地配置BGP发送新增路由的速率可以避免上述情况发生。

请根据设备的性能合理配置BGP发送新增路由的速率,如果设备的性能较高,可以将BGP发送新增路由的速率适当调大;如果设备的性能一般,建议将BGP发送新增路由的速率适当调小。

目前,仅支持对新增IPv4单播和IPv6单播路由的发送速率进行限制。

route-rate-limit rate 配置BGP新增路由发布速率

缺省情况下,不限制BGP发送新增路由的发布速率

配置BGP延迟发布

通过配置当前设备在重启后延迟发布路由更新消息,可以保证在重启时BGP先引入其他邻居的所有路由信息,然后再优选并向其他设备发布,以减少设备重启造成的流量丢失。

配置BGP延迟发布后,如果需要部分路由前缀不受延迟发布控制,可以使用路由策略进行控制,通过前缀列表过滤的路由不受延迟发布的影响。

bgp update-delay on-startup seconds 配置设备在重启后延迟发布路由更新消息

缺省情况下,设备重启后立刻向BGP邻居发布路由更新消息

bgp update-delay on-startup prefix-list prefix-list-name

(可选)配置路由策略控制BGP延迟发布 目前只支持IPv4地址前缀列表

配置设备启动时为BGP路由应用启动策略

设备在启动时,通过为BGP路由应用启动策略,修改发送的BGP路由的属性值,使得接收端优选其他设备发送的路由,可以减少设备重启造成的流量丢失。

bgp apply-policy on-startup duration seconds 配置设备在重启后发送应用启动策略的路由更新消息的时间

bgp policy on-startup med med-value 配置启动策略中的MED值 缺省情况下,启动策略中的MED值为4294967295

配置BGP路径的选择

配置MED属性

MED用来判断流量进入AS时的最佳路由。当一个BGP路由器通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。

default med med-value 配置MED的缺省值 缺省情况下,MED的缺省值为0

compare-different-as-med 配置允许比较来自不同AS路由的MED属性值

缺省情况下,不允许比较来自不同AS路由的MED属性值

bestroute compare-med 配置对来自同一AS的路由进行MED排序优选

缺省情况下,不会对来自同一AS的路由进行MED排序优选

配置AS_Path属性

bestroute as-path-neglect 配置BGP在选择最优路由时忽略AS_PATH属性 缺省情况下,BGP将AS_PATH属性作为选择最优路由的一个条件

peer { group-name | ipv4-address [ mask-length ] } fake-as as-number 为对等体/对等体组指定一个虚拟的本地自治系统号

配置发送BGP更新消息时AS_Path属性中不携带私有AS号

私有AS号是内部使用的AS号,范围为64512~65535。私有AS号主要用于测试网络,一般情况下不需要在公共网络中传播。

通过本配置,可以指定如果向EBGP对等体/对等体组发送的BGP更新消息中AS_PATH属性只包括私有AS号,则删除私有AS号后,将BGP更新消息发送给对等体/对等体组。

peer { group-name | ipv4-address [ mask-length ] } public-as-only 配置向指定EBGP对等体/对等体组发送BGP更新消息时只携带公有AS号,不携带私有AS号

缺省情况下,系统收到EBGP路由后,会检测路由的第一个AS号。如果此AS号不是EBGP对等体的AS号,且不是私有AS号,则断开与该对等体的BGP会话。

通过配置ignore-first-as命令,可以忽略对EBGP路由第一个AS号的检测。

表1-75 配置EBGP不检测路由的第一个AS号

ignore-first-as 配置不检测EBGP路由的第一个AS号

配置BGP在选择最优路由时忽略IGP Metric的比较

从多个邻居收到多条相同前缀但不同路径的路由时,BGP需要选择到达该前缀的最佳路由来指导报文转发。缺省情况下,BGP会比较这些路由下一跳的IGP路由的Metric值,并优选IGP Metric值最小的路由。

配置了本功能后,BGP在选择最优路由时忽略IGP Metric的比较。

bestroute igp-metric-ignore 配置BGP在选择最优路由时忽略IGP Metric的比较

配置SoO属性

为BGP对等体/对等体组配置SoO属性后,从该BGP对等体/对等体组接收路由时设备会为路由增加SoO属性,并且向该BGP对等体/对等体组发布路由时设备会检查路由的SoO属性,如果路由中携带的SoO属性与为对等体/对等体组配置的SoO属性相同,则不会将该路由发布给对等体/对等体组,从而避免路由环路。

peer { group-name | ipv4-address [ mask-length ] } soo site-of-origin 为BGP对等体/对等体组配置SoO属性

调整和优化BGP网络

配置BGP会话的存活时间间隔与保持时间

timer keepalive keepalive hold holdtime

peer { group-name | ipv4-address [ mask-length ] } timer keepalive keepalive hold holdtime

缺省情况下,BGP会话的存活时间间隔为60秒,保持时间为180秒

配置重新建立BGP会话的时间间隔

timer connect-retry retry-time

peer { group-name | ipv4-address [ mask-length ] | ipv6-address [ prefix-length ] } timer connect-retry retry-time

缺省情况下,本地路由器与对等体/对等体组之间重新建立BGP会话的时间间隔为32秒    
   

配置发布同一路由的时间间隔

peer { group-name | ipv4-address [ mask-length ] } route-update-interval interval

缺省情况下,向IBGP对等体发布同一路由的时间间隔为15秒,向EBGP对等体发布同一路由的时间间隔为30秒

使能直连EBGP会话快速复位功能

如果没有使能本功能,则连接直连EBGP对等体的链路down后,本地路由器不会立即断开与EBGP对等体的会话,而是等待会话保持时间(Holdtime)超时后,才断开该会话。没有使能本功能时,链路震荡不会影响EBGP会话的状态。

如果使能了本功能,则连接直连EBGP对等体的链路down后,本地路由器会立即断开与EBGP对等体的会话,并重新与该对等体建立EBGP会话,从而实现快速发现链路故障,快速重建会话。

ebgp-interface-sensitive 缺省情况下,直连EBGP会话快速复位功能处于使能状态

使能4字节AS号抑制功能

设备支持4字节的AS号,即AS号取值占用4字节,取值范围为1~4294967295。缺省情况下,设备在与对端设备建立BGP会话时,通过Open消息通告对端设备本端支持4字节的AS号。如果对端设备不支持4字节AS号(只支持2字节AS号),则会导致会话协商失败。此时,在本端与对端设备之间使能4字节AS号抑制功能,可以使得本端设备通过Open消息向对端设备谎称自己不支持4字节的AS号,从而确保本端和对端设备之间可以成功建立BGP会话。

peer { group-name | ipv4-address [ mask-length ] } capability-advertise suppress-4-byte-as

缺省情况下, 4字节AS号抑制功能处于关闭状态

配置BGP的MD5认证

通过为BGP对等体配置BGP的MD5认证,可以在以下两方面提高BGP的安全性:

为BGP建立TCP连接时进行MD5认证,只有两台路由器配置的密钥相同时,才能建立TCP连接,从而避免与非法的BGP路由器建立TCP连接。

传递BGP报文时,对封装BGP报文的TCP报文段进行MD5运算,从而保证BGP报文不会被篡改。

peer { group-name | ipv4-address [ mask-length ] } password { cipher | simple } password

配置BGP负载分担

通过改变BGP选路规则实现负载分担时,设备根据balance命令配置的进行BGP负载分担的路由条数,选择指定数目的路由进行负载分担,以提高链路利用率。

balance [ ebgp | eibgp | ibgp ] number 配置进行BGP负载分担的路由条数

缺省情况下,不会进行BGP负载分担

balance as-path-neglect (可选)配置不同AS_PATH属性的路由能够形成BGP负载分担

缺省情况下,不同AS_PATH属性的路由之间不能形成BGP负载分担

balance as-path-relax (可选)配置内容不同但长度相同的AS_PATH属性的路由能够形成BGP负载分担

缺省情况下,内容不同但长度相同的AS_PATH属性的路由不能形成BGP负载分担

禁止与对等体建立会话

由于网络升级维护等原因,需要暂时断开与某个对等体/对等体组的BGP会话时,可以通过本配置禁止与该对等体/对等体组建立会话。当网络恢复后,通过执行undo peer ignore命令恢复与对等体/对等体组的会话。这样,网络管理员无需删除并重新进行对等体/对等体组相关配置,减少了网络维护的工作量。

peer { group-name | ipv4-address [ mask-length ] } ignore 禁止与对等体/对等体组建立会话

配置BGP NSR

BGP NSR(Nonstop Routing,不间断路由)是一种通过在BGP协议主备进程之间备份必要的协议状态和数据(如BGP邻居信息和路由信息),使得BGP协议的主进程中断时,备份进程能够无缝地接管主进程的工作,从而确保对等体感知不到BGP协议中断,保持BGP路由,并保证转发不会中断的技术。

导致BGP主进程中断的事件包括以下几种:

  • BGP主进程重启
  • BGP主进程所在的主控板发生故障
  • BGP主进程所在的主控板进行ISSU(In-Service Software Upgrade,不中断业务升级)

BGP NSR与BGP GR具有如下区别,请根据实际情况选择合适的方式确保数据转发不中断:

对设备要求不同:BGP协议的主进程和备进程运行在不同的主控板上,因此要运行BGP NSR功能,设备上必须有两个或两个以上的主控板。要运行BGP GR功能,设备上可以只有一个主控板。

对BGP对等体的要求不同:使用BGP NSR功能时,BGP对等体不会感知本地设备发生了BGP进程的异常重启或主备倒换等故障,不需要BGP对等体协助恢复BGP路由信息。BGP GR要求BGP对等体具有GR能力,并且在BGP会话中断恢复时,BGP对等体能够作为GR helper协助本地设备恢复BGP路由信息。

non-stop-routing 使能BGP NSR功能 缺省情况下,BGP NSR功能处于关闭状态

华为设备缺省处于使能状态。

BGP功能特性

开启告警功能

snmp-agent trap enable bgp

instance instance-name ]

开启BGP模块的告警功能

缺省情况下,BGP模块的告警功能处于开启状态

使能BGP日志功能

全局使能BGP日志记录功能,并使能与指定对等体/对等体组之间BGP会话的日志记录功能后,与该对等体/对等体组之间的BGP会话建立以及断开时会生成日志信息,通过display bgp peer ipv4 unicast log-info命令或display bgp peer ipv6 unicast log-info命令可以查看记录的日志信息。生成的日志信息还将被发送到设备的信息中心,通过设置信息中心的参数,决定日志信息的输出规则(即是否允许输出以及输出方向)。

log-peer-change 全局使能BGP日志记录功能
缺省情况下,全局BGP日志记录功能处于开启状态

使能BGP的路由抖动日志记录功能

使能BGP对应地址族的路由抖动日志记录功能后,当该地址族的路由发生抖动并满足日志输出条件时会生成路由抖动日志信息。生成的日志信息还将被发送到设备的信息中心,通过设置信息中心的参数,决定日志信息的输出规则(即是否允许输出以及输出方向)。

log-route-flap monitor-time monitor-count [ log-count-limit | route-policy *route-policy-name ] **

缺省情况下,BGP的路由抖动日志记录功能处于关闭状态

配置BGP与BFD联动

配置BGP GR功能后,请慎用BGP与BFD联动功能。因为当链路故障时,系统可能还没来得及启用GR处理流程,BFD已经检测到链路故障了,从而导致GR失败。如果设备上同时配置了BGP GR和BGP BFD,则在BGP GR期间请勿去使能BGP BFD,否则可能导致GR失败。

peer { group-name | ipv4-address [ mask-length ] } bfd [ multi-hop | single-hop ]

缺省情况下,不使用BFD检测本地路由器和BGP对等体/对等体组之间的链路

配置BGP快速重路由

当BGP网络中的链路或某台路由器发生故障时,需要通过故障链路或故障路由器传输才能到达目的地的报文将会丢失或产生路由环路,数据流量将会被中断。直到BGP根据新的网络拓扑路由收敛后,被中断的流量才能恢复正常的传输。

为了尽可能缩短网络故障导致的流量中断时间,网络管理员可以开启BGP快速重路由功能。

开启BGP快速重路由功能的方法有如下两种:

在BGP地址族视图下执行pic命令开启当前地址族的BGP快速重路由功能。采用这种方法时,BGP会为当前地址族的所有BGP路由自动计算备份下一跳,即只要从不同BGP对等体学习到了到达同一目的网络的路由,且这些路由不等价,就会生成主备两条路由。

在BGP地址族视图下执行fast-reroute route-policy命令指定快速重路由引用的路由策略,并在引用的路由策略中,通过apply [ ipv6 ] fast-reroute backup-nexthop命令指定备份下一跳的地址。采用这种方式时,只有为主路由计算出的备份下一跳地址与指定的地址相同时,才会为其生成备份下一跳;否则,不会为主路由生成备份下一跳。在引用的路由策略中,还可以配置if-match子句,用来决定哪些路由可以进行快速重路由保护,BGP只会为通过if-match子句过滤的路由生成备份下一跳。

引用路由策略方式的优先级高于通过pic命令开启BGP快速重路由方式。

IPv4单播路由和IPv6单播路由支持BGP快速重路由功能;IPv4组播路由和IPv6组播路由不支持BGP快速重路由功能。

思科BGP相关配置

配置BGP基础功能

router bgp 100 #创建BGP进程

neighbor ip-address remote-as number #**建立邻居

如果有任何BGP配置更改,则必须重置邻居连接以允许新参数生效。

clear ip bgp address 重置指定邻居的BGP连接

clear ip bgp * 重置所有邻居的**BGP**连接

默认情况下,BGP会话从使用BGP版本4开始,如果需要,向下协商到较早的版本。可以阻止协商并强制路由器使用BGP版本与邻居通信。在路由器配置模式下执行此命令

1
neighbor {ip address | peer-group-name} version value

BGP建立邻居,需要注意以下几点:

  • BGP版本是v4.
  • 远端router id, 这个数字是路由器上最高的IP地址,或者是最高的环回接口(如果存在的话)。
  • 表版本:表版本提供了表的状态。每当有新的信息进来时,表就会增加版本。如果一个版本在不断增加,则表示有某个路由皮瓣导致路由的不断更新。

1
2
3
4
5
6
7
8
9
show ip bgp neighbors
     BGP neighbor is 129.213.1.1, remote AS 200, external link 
     BGP version 4, remote router ID 175.220.12.1 
     BGP state = Established, table version = 3, up for 0:10:59 
     Last read 0:00:29, hold time is 180, keepalive interval is 60 seconds 
     Minimum time between advertisement runs is 30 seconds 
     Received 2828 messages, 0 notifications, 0 in queue 
     Sent 2826 messages, 0 notifications, 0 in queue 
     Connections established 11; dropped 10

BGP的Loopback接口和EBGP多跳:

使用环回接口来定义邻居在iBGP中很常见,但在eBGP中不常见。通常,使用环回接口来确保邻居的IP地址不受正常运行的硬件的影响。在eBGP的情况下,对等路由器经常有直接连接,环回不适用。

1
neighbor ip-address update-source interface #指定更新

1
2
3
4
5
6
7
8
9
neighbor 180.225.11.1 ebgp-multihop #配置EBGP多跳
配置示例:
int loopback 0 
ip address 150.10.1.1 255.255.255.0 
router bgp 100 
neighbor 160.10.1.1 remote-as 200 
neighbor 160.10.1.1 ebgp-multihop 
neighbor 160.10.1.1 update-source loopback 0 
network 150.10.0.0

使用环回口建立邻居的情况下,如果有多跳链路直连,可以实现负载。

BGP中控制路由的接收与发送

1
route-map map-tag [[permit | deny] | [sequence-number]]

route-map可以匹配:

  • match as-path
  • match community
  • match clns
  • match interface
  • match ip address
  • match ip next-hop
  • match ip route-source
  • match metric
  • match route-type
  • match tag

可以设置:

  • set as-path
  • set clns
  • set automatic-tag
  • set community
  • set interface
  • set default interface
  • set ip default next-hop
  • set level
  • set local-preference
  • set metric
  • set metric-type
  • set next-hop
  • set origin
  • set tag
  • set weight

路由策略配置示例:

1
2
3
4
5
6
7
router bgp 300
network 170.10.0.0
neighbor 2.2.2.2 remote-as 100
neighbor 2.2.2.2 route-map STOPUPDATES out
 
route-map STOPUPDATES permit 10
match ip address 1

1
2
access-list 1 deny 170.10.0.0 0.0.255.255
access-list 1 permit 0.0.0.0 255.255.255.255

BGP宣告网络

Network宣告网段:

1
network network-number [mask network-mask], 最多宣告200个。

重分发网段:

1
2
3
redistribute ospf 10
neighbor 1.1.1.1 distribute-list 1 out #配置BGP重分发,建议使用过滤,只重分发需要的路由。
redistribute eigrp 10

思科设备BGP选路原则

当BGP从不同的自治系统接收到关于不同目的地的更新后,协议必须选择到达特定目的地的路径。BGP只选择一条路径到达特定的目的地。

BGP总是向邻居传播最佳路径。

1
neighbor {ip-address | peer-group-name} next-hop-self  #配置BGP下一跳为自己

思科路由协议的默认管理距离:

default distances are:

  • 120 for RIP
  • 100 for IGRP
  • 90 for EIGRP
  • 110 for OSPF

By default, BGP has these distances:

  • External distance—20
  • Internal distance—200
  • Local distance—200

1
distance bgp external-distance internal-distance local-distance #调整BGP的默认管理距离

如果想要优选IGP路由,有两种方式:

  1. 更改BGP的默认管理距离。distance bgp ,不建议改变。

  2. 使用BGP(Backdoor)后门。 BGP后门使IGP路由成为首选路由。

所配置的网络是希望通过IGP访问的网络。对于BGP,这个网络与本地分配的网络得到相同的处理,只是BGP更新不会公布这个网络

示例:

1
2
3
router bgp 100 
neighbor 2.2.2.1 remote-as 300 
network 160.10.0.0 backdoor

网络160.10.0.0仅仅在本地有效,不发布给其他BGP邻居。

BGP与IGP同步配置

同步状态下,如果您的AS从另一个AS传递流量到第三个AS, BGP不应该在您的AS中的所有路由器通过IGP了解路由之前发布路由广告。BGP会等待,直到IGP在AS中传播了路由。然后,BGP向外部同行宣传路线

禁止同步状态下,在某些情况下,不需要同步。如果您没有通过AS传递来自不同AS的流量可以禁用同步。也可以禁用同步,如果所有路由器在您的AS运行BGP。禁用此功能可以让您在IGP中携带更少的路由,并允许BGP更快地聚合。

同步的失效不是自动的。如果你所有的路由器在AS中运行BGP,而你根本不运行IGP,路由器就无从得知。在路由器将路由发送给外部节点之前,您的路由器无限期地等待关于某个路由的IGP更新。在这种情况下,你必须手动禁用同步,这样路由才能正常工作:

思科设备中IGP与BGP默认同步。需要手动关闭。

1
2
router bgp 100 
no synchronization

关闭后,必须重置邻居会话。

Weight(权重)属性(思科私有属性)

weight属性是一个cisco定义的属性。此属性使用weight选择最佳路径。该weight在本地分配给路由器。该值只对特定的路由器有意义。该值不会通过任何路由更新传播或携带。权重可以是0到65,535之间的数字。路由器初始化的路径的默认权值为32,768,其他路径的权值为0

当同一目的地存在多条路由时,具有较高权值的路由优先

思科的Weight与华为PreVal值作用类似。 协议首选值(PrefVal)是华为设备的特有属性

Multiple mthods achieve this weight set:

Use the neighbor command.

neighbor {*ip-address | peer-group*} weight weight

Use AS_PATH access lists.

ip as-path access-list access-list-number {permit | deny} as-regular-expression neighbor ip-address filter-list access-list-number weight weight

Use route maps.

Local-preference,本地优先级

本地优先级用于判断离开AS时的最佳路径。具有较高局部首选项的路径更受欢迎。本地首选项的默认值是100。

与仅与本地路由器相关的weight属性不同,本地首选项是路由器交换的属性在同一个AS中。

bgp default local-preference value #配置默认local-preference

配置完,需要重置BGP连接。 clear ip bgp [soft][in/out],使用soft不会破坏连接

Metric(MED) 属性

用于判断进入AS时的路径,优选Metric(MED)值小的路径。Metric在相邻AS之间传播。默认值为0.

除非路由器接收到其他方向,否则该路由器将比较来自邻居的路径指标。为了让路由器比较来自不同ASs的邻居的指标,您需要在路由器上发出特殊的配置命令bgp always-compare-med

bgp always-compare-med,配置从不通AS进来的路由比较MED,默认不比较。

bgp deterministic-med

1
default-metric 50 #调整BGP MED值

1
bgp bestpath as-path ignore #配置忽略as-path

Community属性

1
set community community-number [additive] [well-known-community]

no-export—Do not advertise to eBGP peers. Keep this route within an AS.

no-advertise—Do not advertise this route to any peer, internal or external.

internet—Advertise this route to the Internet community. Any router belongs to this community.

local-as—Use in confederation scenarios to prevent the transmit of packets outside the local AS.

1
neighbor {ip-address | peer-group-name} send-community #强制给邻居发送团体属性

ip bgp-community new-format 配置使用新格式显示团体属性AA:BB

BGP路由过滤

1
neighbor {ip-address | peer-group-name} distribute-list access-list-number {in | out}

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
router bgp 300 
network 170.10.0.0 
neighbor 3.3.3.3 remote-as 200 
neighbor 2.2.2.2 remote-as 100 
neighbor 2.2.2.2 distribute-list 1 out 
access-list 1 deny 160.10.0.0 0.0.255.255 
access-list 1 permit 0.0.0.0 255.255.255.255 
 
ip as-path access-list access-list-number {permit | deny} as-regular-expression
#配置as-path过滤
neighbor {ip-address | peer-group-name} filter-list access-list-number {in | out}
#配置acl过滤
 
BGP团体属性过滤:
router bgp 200 
network 160.10.0.0 
neighbor 3.3.3.1 remote-as 300 
neighbor 3.3.3.1 send-community 
neighbor 3.3.3.1 route-map setcommunity out 
 
route-map setcommunity 
match ip address 1 
set community no-export  
 
access-list 1 permit 0.0.0.0 255.255.255.255 
 
ip community-list community-list-number {permit | deny} community-number

BGP对等体组

1
neighbor peer-group-name peer-group

配置示例:

1
2
3
4
5
6
7
8
9
router bgp 300 
   neighbor externalmap peer-group 
   neighbor externalmap route-map SETMETRIC 
   neighbor externalmap filter-list 1 out 
   neighbor externalmap filter-list 2 in 
   neighbor 2.2.2.2 remote-as 100 
   neighbor 2.2.2.2 peer-group externalmap 
   neighbor 4.4.4.2 remote-as 600 
   neighbor 4.4.4.2 peer-group externalmap

路由聚合

1
aggregate-address 160.0.0.0 255.0.0.0

1
2
3
4
5
6
7
8
9
10
11
12
aggregate-address address mask summary-only #只传输聚合路由
 
aggregate-address address-mask as-set #通告更具体的路由信息。
 
aggregate-address address-mask suppress-map map-name #抑制更详细路由信息
 
aggregate-address address-mask attribute-map map-name #允许在发布路由时,设置属性。
例如:
route-map SETMETRIC 
set origin igp 
 
aggregate-address 160.0.0.0 255.0.0.0 attribute-map SETORIGIN

BGP联盟

1
bgp confederation identifier autonomous-system

1
bgp confederation peers autonomous-system [autonomous-system]

1
2
3
4
5
6
7
8
router bgp 50
bgp confederation identifier 500
bgp confederation peers 60 70
neighbor 128.213.10.1 remote-as 50 (IBGP connection within AS50)
neighbor 128.213.20.1 remote-as 50 (IBGP connection within AS50)
neighbor 129.210.11.1 remote-as 60 (BGP connection with confederation peer 60)
neighbor 135.212.14.1 remote-as 70 (BGP connection with confederation peer 70)
neighbor 5.5.5.5 remote-as 100 (EBGP connection to external AS100)

BGP反射器

1
2
3
4
5
6
neighbor route-reflector-client
 
router bgp 100
neighbor 6.6.6.6 remote-as 100
neighbor 6.6.6.6 route-reflector-client
bgp cluster-id 10

BGP路由震荡

bgp dampening—Turns on dampening.

no bgp dampening—Turns off dampening.

bgp dampening half-life-time —Changes the half-life time.

bgp dampening half-life-time reuse suppress maximum-suppress-time

This list details the syntax:

half-life-time —The range is 1–45 minutes, and the current default is 15 minutes.

reuse-value —The range is 1–20,000, and the default is 750.

suppress-value —The range is 1–20,000, and the default is 2000.

max-suppress-time —This is the maximum duration for the suppression of a route. The range is 1–255 minutes, and the default is 4 times the half-life time.

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

赞(0) 打赏
一分也是爱

支付宝扫一扫打赏

微信扫一扫打赏

上一篇:

下一篇:

相关推荐

博客简介

本站CDN采用VmShell免费提供离中国大陆最近的香港CMI高速网络做支撑,ToToTel打造全球最快速的边沿网络支撑服务,具体详情请见 :https://vmshell.com/ 以及 https://tototel.com/,网站所有的文件和内容禁止大陆网站搬迁复制,谢谢,VPS营销投稿邮箱: admin@linuxxword.com,我们免费帮大家发布,不收取任何费用,请提供完整测试文稿!

精彩评论

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

站点统计

  • 文章总数: 2343 篇
  • 草稿数目: 12 篇
  • 分类数目: 6 个
  • 独立页面: 0 个
  • 评论总数: 2 条
  • 链接总数: 0 个
  • 标签总数: 6116 个
  • 注册用户: 139 人
  • 访问总量: 8,647,907 次
  • 最近更新: 2024年4月28日